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

实现WebSocket和WAMP协议的开源库WampSharp的更多相关文章

  1. 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发

    [原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文  http: ...

  2. 100个Github上Android开源库

    项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开源框架 React Native, ...

  3. Android 第三方开源库收集整理(转)

    原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样,  ...

  4. GitHub上排名前100的Android开源库介绍(来自github)

    本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍,至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果,然后过滤了 ...

  5. GitHub Top 100的Android开源库

    摘要: 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据GitHub搜索Java语言选择「Best M... 本项目主要对目前 GitH ...

  6. 45.Android 第三方开源库收集整理(转)

    原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样,  ...

  7. GitHub 上排名前 100 的 Android 开源库进行简单的介绍

    若有任何疑问可通过邮件或微博联系我 项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开 ...

  8. GitHub开源库排名一百的简单介绍,值得收藏!

    GitHub Android Libraries Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitHub ...

  9. C/C++ 开源库及示例代码

    C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...

随机推荐

  1. php将html转为图片

    在服务器端解析将编译好的html转换为图片. 由于html一般由客户端浏览器解析,服务器端不能直接解析html代码.所以我们需要借助php类库及扩展完成这一需求. 文件转换过程为 html -> ...

  2. lua luaconf解读

    定义了一些跟平台相关的宏,明确指出一些不推荐使用的函数,如lua_cpcall.lua_strlen

  3. jq获取被选中的option的值。jq获取被选中的单选按钮radio的值。

    温故而知新,一起复习下jq的知识点. (1) jq获取被选中的option的值 <select id="select_id"> <option value=&qu ...

  4. 计算生日是星期几-soj

    编写一个程序,只要输入年月日,就能回答那天是星期几. 输入一个日期,包括年.月.日.(一组测试数据) 输出这个日期是星期几. 输入: 1 1 1 2 1 1 2006 7 10 输出: Monday ...

  5. LayoutInflater (转)

    在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...

  6. Android UsageStatsService(应用使用统计服务)的学习与调研

    一. 简介 UsageStatsService是一个系统服务,其主要通过AMS等,来监测并记录各个应用的使用数据,如上次调用com.android.settings的时间等. UsageStatsSe ...

  7. 理论篇:关注点分离(Separation of concerns, SoC)

    概念 关注点分离(Separation of concerns,SOC)是对只与"特定概念.目标"(关注点)相关联的软件组成部分进行"标识.封装和操纵"的能力, ...

  8. 前端测试框架Jest系列教程 -- Matchers(匹配器)

    写在前面: 匹配器(Matchers)是Jest中非常重要的一个概念,它可以提供很多种方式来让你去验证你所测试的返回值,本文重点介绍几种常用的Matcher,其他的可以通过官网api文档查看. 常用的 ...

  9. javascript算法题判断输入年份是否是闰年

    用户输入一个年份,判断这个年是否是闰年.判断闰年条件:① 非整百年数除以4,无余为闰,有余不闰:② 整百年数除以400,无余为闰,有余不闰.比如:2000年,整百数年,就要用②公式,除以400,无余数 ...

  10. 八皇后問題 (C語言递归實現 回溯法)

    八皇后问题是一个以国际象棋为背景的问题:怎样可以在 8×8 的国际象棋棋盘上放置八个皇后,使得不论什么一个皇后都无法直接吃掉其它的皇后?为了达到此目的.任两个皇后都不能处于同一条横行.纵行或斜线上.現 ...