实现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也可以很方便地进行消息多播。
实现WebSocket和WAMP协议的开源库WampSharp相关推荐
- [连载 1] 如何将协议规范变成开源库系列文章之 WebSocket
这是系列文章的第一篇,也是非常重要的一篇,希望大家能读懂我想要表达的意思. 系列文章开篇概述 相对于其他编程语言来说,Python 生态中最突出的就是第三方库.任何一个及格的 Python 开发者都使 ...
- 如何将协议规范变成开源库系列之 WebSocket (一)
这是系列文章的第一篇,也是非常重要的一篇,希望大家能读懂我想要表达的意思. 一.系列文章开篇概述 相对于其他编程语言来说,Python 生态中最突出的就是第三方库.任何一个及格的 Python 开发者 ...
- 使用linux c开源库libwebsockets编写的websocket客户端
<一>: 背景 19年中旬做的一个嵌入式项目, 应用层需要有一个心跳的功能, 当时决定用websocket协议, 所以当时就研究了下libwebsockets的使用. 网上的资料并不多, ...
- 删库跑路、“投毒”、改协议,开源有哪几大红线千万不能踩?
作者 | 彭慧中 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 开源协议是开源世界里的根基.根据CSDN<2021-2022 中国开发者调查报告>数据显示,尽管目前已有94 ...
- Windows下使用DCMTK开源库对DICOM协议的医学图像进行解析与显示
DICOM(Digital Imaging and Communications in Medicine),是用于医学影像处理.储存.打印.传输的一组通用标准协定.目前,被广泛应用于放射医疗,心血管成 ...
- css 解析 开源库_干货 | python库大全,全面高效
黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Python开发点击右侧关注,探讨技术话题!来源丨速学Pythonhttps://mp.weixin.qq.com ...
- 常用C/C++开源库
1. 框架 Apache C++ Standard Library : 是一系列算法,容器,迭代器和其他基本组件的集合 ASL : Adobe源代码库提供了同行的评审和可移植的C++源代码库. Boo ...
- iOS开发的库的列表,不完全是开源库
这个也是从他人的总结中COPY过来,加以整理的 iOS苹果官方Demo合集1.网页地址 2.官方地址 优质iOS UI/UE库:1.gitHub地址 [资源集合]94个iOS开发资源推荐 iOS开发的 ...
- C++开源库大全(转)
http://blog.csdn.net/chen19870707/article/details/40427645 程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库.Web应用框架 ...
最新文章
- 放弃51单片机,直接学STM32开发会有什么严重的问题?
- caffe中的学习率的衰减机制
- 熔断,限流,降级 一些理解
- Spring-data-redis 反序列化异常
- JavaScript 特有奇葩问题“字符串类型与数字类型混乱”的分析与解决,与类型转换
- C++ limits头文件的用法numeric_limits
- FreeRTOS源码分析与应用开发01:中断配置与临界段
- Postgresql pg_dumppg_restore用法
- thymeleaf使用总结
- PPT:动画出现设置
- 华云数字实名认证图片_“云联盟华云数字”是云数贸传销组织衍生平台!不要被骗了...
- html 不间断背音乐代码,请参考不用框架结构做出 “页面间跳转而不间断的背景音乐”每次进去还是随机播放...
- PO,VO,DAO,BO,POJO之间的区别与解释
- Java版人脸检测详解上篇:运行环境的Docker镜像(CentOS+JDK+OpenCV)
- python实现网站测速软件_网站测速插件是什么-和网站测速插件相关的问题-阿里云开发者社区...
- String.contains()方法
- 复旦Moss团队:Moss参数规模约是ChatGPT的1/10;贾跃亭再获FF执行官身份;PowerToys新版发布|极客头条
- android studio调用电话,Android studio案例之实现电话拨号
- 用vim编辑器在行首添加行号、序列号
- 使用驱动程序点亮LED灯
热门文章
- [POI2009]石子游戏Kam
- Monkey之环境搭建
- 如何使用MongoDB+Springboot实现分布式ID?
- 杭电2391--Filthy Rich(DP)
- 【贪心School】机器学习课程笔记
- 云免流控服务器响应失败,云免流服务器是否违法
- 测控技术与仪器是计算机相关的,测控技术与仪器专业
- linux终端中书名号,Linux双引号、单引号和反向单引号
- groovy 慢_grails – Groovy中的sql.rows()运行缓慢
- pycharm自定义代码片段