@orangleliu
2016-08-18T10:28:41.000000Z
字数 3113
阅读 2471
物联网 wamp
简单学习和使用WAMP协议,Router 是crossbario, Client是Autobahn, 了解运作的流程。
测试环境是Centos6 虚拟机一台 目录为 /data/wamp/ ,用的是Python 2的版本,主要就是参考文档(其他地方也没有什么资料)
必须要看看,否则下面写的东西也没什么用了, 基于Websocket的上层协议关于router和client library有很多语言的实现,Python比较熟悉,所以都是用Python的版本。
这两个组建官网都有详细的原理介绍,建议先看一遍。
crossbario 支持 PubSub模式 和 rRPC 模式 两种模式。
autobahn 是client端,它跟 crossbar 交互使用的协议叫做 WAMP 协议(基于 Websocket 的上层协议), 它是基于 Twisted 或者是 Asyncio(py3)的,教程中两种方式都有写, 我用的是Twisted版本。
Where to start 入门文章的小列表
websocket 案例 很多经典的问题,还没用到 crossbario
WAMP 编程 这是重点,看明白,跑通案例。
Crossbar 主要的操作就是启动,停止和配置,他是封装好的服务端。
[root@orangleliu helloworld]# crossbar initAutomatically choosing optimal Twisted reactorRunning on Linux and optimal reactor (epoll) was installed.Initializing application template 'default' in directory '/data/wamp/helloworld'Using template from '/opt/rh/python27/root/usr/lib/python2.7/site-packages/crossbar/templates/default'Creating directory /data/wamp/helloworld/.crossbarCreating file /data/wamp/helloworld/.crossbar/config.jsonApplication template initializedTo start your node, run 'crossbar start --cbdir /data/wamp/helloworld/.crossbar'
在当前目录生成一个 .crossbar 目录,并包涵一个 config.json 的默认配置
[root@orangleliu helloworld]# crossbar start2016-08-05T00:27:46+0800 [Controller 13433] Automatically choosing optimal Twisted reactor2016-08-05T00:27:46+0800 [Controller 13433] Running on Linux and optimal reactor (epoll) was installed.2016-08-05T00:27:47+0800 [Controller 13433] New node key generated!2016-08-05T00:27:47+0800 [Controller 13433] __ __ __ __ __ __ __ __2016-08-05T00:27:47+0800 [Controller 13433] / `|__)/ \/__`/__`|__) /\ |__) |/ \2016-08-05T00:27:47+0800 [Controller 13433] \__,| \\__/.__/.__/|__)/~~\| \. |\__/2016-08-05T00:27:47+0800 [Controller 13433]2016-08-05T00:27:47+0800 [Controller 13433] Crossbar.io Version: 0.13.02016-08-05T00:27:47+0800 [Controller 13433] Node Public Key: dbdc15e38c8e8d5ea53fb51ad1234affedcfd2e55480e6408ff69ff173e476532016-08-05T00:27:47+0800 [Controller 13433]2016-08-05T00:27:47+0800 [Controller 13433] Running from node directory '/data/wamp/helloworld/.crossbar'2016-08-05T00:27:47+0800 [Controller 13433] Controller process starting (CPython-EPollReactor) ..2016-08-05T00:27:47+0800 [Controller 13433] Node configuration loaded from 'config.json'
启动服务器,读取配置,并开始监听
Components 的概念,就是组建,是RPC 的调用和被调用方,也可以是 PubSub的发布和订阅方,四种角色都是组件,在这个前提下写应用code。
3个角色 Caller, Callee, Dealer
Caller(调用者) 使用url和参数调用远程接口, Callee拿到参数去执行,然后返回结果Callee 首先会注册调用到 Dealer(crossbario),Caller的调用首先到 Dealer, Dealer 会把 Caller 的调用路由到对应的 Callee,然后把Callee的结果,返回给Caller.Caller 和 Callee 会跑应用代码,Dealer 会做RPC的通用路由。
RPC模型主要有个两个步骤,注册程序,调用程序。
现在问题是,我写好了RPC的程序,怎么注册到router里面呢?是在crossbar中自动生成,还是要手动改配置文件等?
其实都不是,都是由 Components自己去注册,其他Componets来自己使用。具体的操作类似 Callee程序连接 crossbar, 然后注册自己能给别人提供的API,然后Caller 连接 Router crossbario 调用程序,如果 Callee 掉线了,那么 Caller 也就无法调用了。
有3个角色 Publisher, Subscriber, Broker
Publiser(发布者)提供 url和对应的 payload, Subscribers 订阅者可以接收到发布者的信息。Broker就是提供发布和订阅的场所。跟我们大多数的消息队列中提供的发布订阅模式类似.

基于入门教程 WAMP programming 写了一遍,大概有感性的认识。
如果是1w台设备的管理,有定时上报信息,有控制设备端的指令,怎么设计呢?
设备主动通信的时候,使用RPC,服务端提供通用的接口就行了。
服务端主动通信的时候就需要使用PubSub,这样可以及时把消息push到设备上。
服务端性能要求比较高,对于设备端可以简单的实现协议,然后封装API就能完成很多工作了。
这玩意的性能和工业案例有吗?
官网上给了几个,不过看起来都不熟悉