实现WebSocket和WAMP协议的开源库WampSharp

Websocket Application Messaging Protocol 协议:https://github.com/wamp-proto/wamp-proto

1. 基础档案

引入:

WAMP协议是一种建立在Websocket之上可以进行publish&subscribe和rpc的通信协议。它实现了类似ZeroMQ中的pub&sub通信模式,同时将这种模式用于传统的rpc通信,较好地解耦了通信端点之间的直接联系。

基础概念:

broker:pub&sub通信模式中的中间件。

dealer:rpc中caller&callee通信的中间件。

router:router其实就是broker和dealer的结合体。

realm:realm为router中的一个活动空间,client之间通信以realm为活动区间。

client:通信实体,消息发布者/订阅者,接口调用者/实现者。

peer:client或者router。

role:peer所扮演的角色。

topic:pub&sub主题,使用uri格式表达。

procedure:rpc的接口地址,同样使用uri格式来表达。

通信模型:

(specification的这幅图说明了一切)

https://github.com/Code-Sharp/WampSharp 实现了 The WebSocket ProtocolThe WebSocket Application Messaging Protocol (WAMP) 协议。

特性:

  • 支持WebSocket RFC6455和WAMP V1/v2
  • 很好的符合标准
  • 高性能异步设计
  • 易于使用的API
Client端

Components 的概念,就是组件,是RPC 的调用和被调用方,也可以是 PubSub的发布和订阅方,四种角色都是组件,在这个前提下写应用code。

RPC模型

3个角色 Caller, Callee, Dealer

  • Caller(调用者) 使用url和参数调用远程接口, Callee拿到参数去执行,然后返回结果
  • Callee 首先会注册调用到 DealerCaller的调用首先到 Dealer, Dealer 会把 Caller 的调用路由到对应的 Callee,然后把Callee的结果,返回给Caller.
  • CallerCallee 会跑应用代码,Dealer 会做RPC的通用路由。

RPC模型主要有个两个步骤,注册程序,调用程序。

现在问题是,我写好了RPC的程序,怎么注册到router里面呢?是在WampSharp中自动生成,还是要手动改配置文件等?

其实都不是,都是由 Components自己去注册,其他Componets来自己使用。具体的操作类似 Callee程序连接 crossbar, 然后注册自己能给别人提供的API,然后Caller 连接 Router crossbario 调用程序,如果 Callee 掉线了,那么 Caller 也就无法调用了。

PubSub 模型

有3个角色 Publisher, Subscriber, Broker

Publiser(发布者)提供 url和对应的 payload, Subscribers 订阅者可以接收到发布者的信息。Broker就是提供发布和订阅的场所。跟我们大多数的消息队列中提供的发布订阅模式类似.

总结:

WAMP引入的router可以使得后端接口无缝更新,另外realm使得后端接口只暴露功能子集给前端。pub&sub也可以很方便地进行消息多播。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

并发编程~先导篇上

并发 :一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

21280
来自专栏菩提树下的杨过

ActiveMQ笔记(6):消息延时投递

在开发业务系统时,某些业务场景需要消息定时发送或延时发送(类似:飞信的短信定时发送需求),这时候就需要用到activemq的消息延时投递,详细的文档可参考官网说...

44950
来自专栏Felix的技术分享

《一个操作系统的实现》笔记(2)--保护模式

39880
来自专栏逸鹏说道

直传文件到Azure Storage的Blob服务中

题记:为了庆祝获得微信公众号赞赏功能,忙里抽闲分享一下最近工作的一点心得:如何直接从浏览器中上传文件到Azure Storage的Blob服务中。 为什么 如果...

37370
来自专栏草根专栏

使用Identity Server 4建立Authorization Server (1)

本文内容基本完全来自于Identity Server 4官方文档: https://identityserver4.readthedocs.io/ 官方文档很详...

533100
来自专栏草根专栏

使用Identity Server 4建立Authorization Server (6) - js(angular5) 客户端

由于手头目前用项目, 所以与前几篇文章不同, 这次要讲的js客户端这部分是通过我刚刚开发的真是项目的代码来讲解的. 这是后端的代码: https://githu...

61950
来自专栏大魏分享(微信公众号:david-share)

用Ansible自动供应vmware虚拟机--构建数据中心一体化运维平台第二篇

1.1 简述 一直以来,打开邮箱被ticket糊一脸的事情时有发生。我一直在想,能不能以一种简单的方案(不花老板的钱)来供应(provisioning)虚拟机呢...

73520
来自专栏Seebug漏洞平台

使用 XML 内部实体绕过 Chrome 和 IE 的 XSS 过滤器

来源:BypassingXSSFiltersusingXMLInternalEntities 原作者:DavidLitchfield (david@davidl...

415100
来自专栏智能大石头

NewLife.Net——开始网络编程

14230
来自专栏张善友的专栏

实现WebSocket和WAMP协议的开源库WampSharp

22250

扫码关注云+社区

领取腾讯云代金券