实现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 Protocol 和 The 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
首先会注册调用到Dealer
,Caller
的调用首先到Dealer
,Dealer
会把Caller
的调用路由到对应的Callee
,然后把Callee
的结果,返回给Caller
. -
Caller
和Callee
会跑应用代码,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也可以很方便地进行消息多播。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R语言中的偏最小二乘回归PLS-DA
- R语言实现偏最小二乘回归法 partial least squares (PLS)回归
- 用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类
- python爬虫进行Web抓取LDA主题语义数据分析报告
- Python使用神经网络进行简单文本分类
- 在Python中自然语言处理生成词云WordCloud
- 使用Python中的ImageAI进行对象检测
- 适用于NLP自然语言处理的Python:使用Facebook FastText库
- R语言ISLR工资数据进行多项式回归和样条回归分析
- Python中用PyTorch机器学习分类预测银行客户流失模型
- R语言犯罪率回归模型报告Regression model on crimerate report
- leetcode树之从根到叶的二进制数之和
- 超冗余机器人运动控制:蛇形机器人 & 8自由度平面机械臂
- Linux Ubuntu / CentOS / MacOS 等系统安装使用 MTR 以及阅读分析 MTR 报告教程
- Helm3部署安装