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 首先会注册调用到 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也可以很方便地进行消息多播。

实现WebSocket和WAMP协议的开源库WampSharp相关推荐

  1. [连载 1] 如何将协议规范变成开源库系列文章之 WebSocket

    这是系列文章的第一篇,也是非常重要的一篇,希望大家能读懂我想要表达的意思. 系列文章开篇概述 相对于其他编程语言来说,Python 生态中最突出的就是第三方库.任何一个及格的 Python 开发者都使 ...

  2. 如何将协议规范变成开源库系列之 WebSocket (一)

    这是系列文章的第一篇,也是非常重要的一篇,希望大家能读懂我想要表达的意思. 一.系列文章开篇概述 相对于其他编程语言来说,Python 生态中最突出的就是第三方库.任何一个及格的 Python 开发者 ...

  3. 使用linux c开源库libwebsockets编写的websocket客户端

    <一>: 背景 19年中旬做的一个嵌入式项目, 应用层需要有一个心跳的功能, 当时决定用websocket协议, 所以当时就研究了下libwebsockets的使用. 网上的资料并不多, ...

  4. 删库跑路、“投毒”、改协议,开源有哪几大红线千万不能踩?

    作者 | 彭慧中 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 开源协议是开源世界里的根基.根据CSDN<2021-2022 中国开发者调查报告>数据显示,尽管目前已有94 ...

  5. Windows下使用DCMTK开源库对DICOM协议的医学图像进行解析与显示

    DICOM(Digital Imaging and Communications in Medicine),是用于医学影像处理.储存.打印.传输的一组通用标准协定.目前,被广泛应用于放射医疗,心血管成 ...

  6. css 解析 开源库_干货 | python库大全,全面高效

    黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Python开发点击右侧关注,探讨技术话题!来源丨速学Pythonhttps://mp.weixin.qq.com ...

  7. 常用C/C++开源库

    1. 框架 Apache C++ Standard Library : 是一系列算法,容器,迭代器和其他基本组件的集合 ASL : Adobe源代码库提供了同行的评审和可移植的C++源代码库. Boo ...

  8. iOS开发的库的列表,不完全是开源库

    这个也是从他人的总结中COPY过来,加以整理的 iOS苹果官方Demo合集1.网页地址 2.官方地址 优质iOS UI/UE库:1.gitHub地址 [资源集合]94个iOS开发资源推荐 iOS开发的 ...

  9. C++开源库大全(转)

    http://blog.csdn.net/chen19870707/article/details/40427645 程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库.Web应用框架 ...

最新文章

  1. 放弃51单片机,直接学STM32开发会有什么严重的问题?
  2. caffe中的学习率的衰减机制
  3. 熔断,限流,降级 一些理解
  4. Spring-data-redis 反序列化异常
  5. JavaScript 特有奇葩问题“字符串类型与数字类型混乱”的分析与解决,与类型转换
  6. C++ limits头文件的用法numeric_limits
  7. FreeRTOS源码分析与应用开发01:中断配置与临界段
  8. Postgresql pg_dumppg_restore用法
  9. thymeleaf使用总结
  10. PPT:动画出现设置
  11. 华云数字实名认证图片_“云联盟华云数字”是云数贸传销组织衍生平台!不要被骗了...
  12. html 不间断背音乐代码,请参考不用框架结构做出 “页面间跳转而不间断的背景音乐”每次进去还是随机播放...
  13. PO,VO,DAO,BO,POJO之间的区别与解释
  14. Java版人脸检测详解上篇:运行环境的Docker镜像(CentOS+JDK+OpenCV)
  15. python实现网站测速软件_网站测速插件是什么-和网站测速插件相关的问题-阿里云开发者社区...
  16. String.contains()方法
  17. 复旦Moss团队:Moss参数规模约是ChatGPT的1/10;贾跃亭再获FF执行官身份;PowerToys新版发布|极客头条
  18. android studio调用电话,Android studio案例之实现电话拨号
  19. 用vim编辑器在行首添加行号、序列号
  20. 使用驱动程序点亮LED灯

热门文章

  1. [POI2009]石子游戏Kam
  2. Monkey之环境搭建
  3. 如何使用MongoDB+Springboot实现分布式ID?
  4. 杭电2391--Filthy Rich(DP)
  5. 【贪心School】机器学习课程笔记
  6. 云免流控服务器响应失败,云免流服务器是否违法
  7. 测控技术与仪器是计算机相关的,测控技术与仪器专业
  8. linux终端中书名号,Linux双引号、单引号和反向单引号
  9. groovy 慢_grails – Groovy中的sql.rows()运行缓慢
  10. pycharm自定义代码片段