实现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 条评论
登录 后参与评论

相关文章

来自专栏有趣的django

Django REST framework+Vue 打造生鲜超市(十二) 十三、首页、商品数量、缓存和限速功能开发

十三、首页、商品数量、缓存和限速功能开发  13.1.轮播图接口实现 首先把pycharm环境改成本地的,vue中local_host也改成本地  (1)goo...

4616
来自专栏Python绿色通道

Python爬虫:把爬取到的数据插入到execl中

前面我们把大量数据已经爬取到了本地,但这些数据如果不存储起来,那么就会变得无效.开始本文之前,请确保已经阅读。

823
来自专栏Python爬虫与算法进阶

快速写一个爬虫

今天下班前,老板让我帮忙爬一个数据,简单看了下,需要登录,看起来应该不难。回到家,注册一个账号,复制url,然后用postman转代码,简单暴力,直接撸。

831
来自专栏向治洪

xmpp即时通讯四

     TLS协商(5节)后,如果需要SASL协商(6节)与资源绑定(7节),XML节可通过流来发送。定义了三种XML节用于 'jabber:client'与...

1815
来自专栏进击的程序猿

6.824 Lab 3: Fault-tolerant Key/Value Service Part-AIntroduction实际设计中出现的问题

该实验是mit 6.824课程的第3个实验,基于raft协议完成一个key-value系统

823
来自专栏知识分享

关于原子哥ENC28J60网络通信模块接收数据代码的一点疑惑

---恢复内容开始--- 这几天做STM32的ENC28J60网络通信模块,自己在原子哥的代码上进行修改测试,,发现一个问题,电脑和板子进行通信的时候总隔一段时...

3428
来自专栏社区的朋友们

Java 动态加载 so 的解决方案

业务场景有对 so 实现动态加载/替换的需求,但 Java 并没有直接动态加载 so 的机制。本文将深度剖析 Java 加载 so 的实现机制,并提出一套 Ja...

9571
来自专栏Golang语言社区

52. Socket Server 自定义协议的简单实现 | 厚土Go学习笔记

在 Server 和 Client 通讯中,由于网络等原因很有可能会发生数据丢包的现象。如果数据确实,服务端接收的信息不完整,就会造成混乱。 我们就需要在 Se...

3969
来自专栏腾讯IVWEB团队的专栏

在 NodeJS 中玩转 Protocol Buffer

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化,很适合做数据存储或 RPC 数据交换格式。

1K0
来自专栏攻城狮的动态

iOS面试题梳理(三)

3327

扫码关注云+社区