博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现WebSocket和WAMP协议的开源库WampSharp
阅读量:6201 次
发布时间:2019-06-21

本文共 1336 字,大约阅读时间需要 4 分钟。

Websocket Application Messaging Protocol 协议: 

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的这幅图说明了一切)

5361433.png

实现了 协议。

特性:

  • 支持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也可以很方便地进行消息多播。

转载地址:http://yetca.baihongyu.com/

你可能感兴趣的文章
JavaScript里的类和继承
查看>>
leetcode31
查看>>
剑指Offer 22 链表中倒数第k个节点
查看>>
c++试题
查看>>
jquery使用
查看>>
git使用中遇到的常见问题
查看>>
js事件
查看>>
PHP秒数转换为时分
查看>>
JavaOOP-继承
查看>>
android开发小内容
查看>>
MySQL无损复制(转)
查看>>
How to:如何让Installshield显示正确的软件所需空间--网友冰块先生贡献
查看>>
网络字节序、主机字节序以及大小端的问题
查看>>
Windows Azure Web Site最酷的五个特性
查看>>
Mac OS X 10.8.4下面XZ Utils(*.tar.xz)压缩解压缩命令工具的安装
查看>>
百度笔试题:malloc/free与new/delete的区别
查看>>
中小网站如何使用谷歌Adsence国际化优势赚钱?
查看>>
目标检测算法之YOLOv1与v2
查看>>
Linux: Bash基本命令
查看>>
解决nginx [error] open() "usr/local/nginx/logs/nginx.pid" failed错误
查看>>