@orangleliu
2016-08-18T18:28:41.000000Z
字数 3113
阅读 2246
物联网
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 init
Automatically choosing optimal Twisted reactor
Running 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/.crossbar
Creating file /data/wamp/helloworld/.crossbar/config.json
Application template initialized
To start your node, run 'crossbar start --cbdir /data/wamp/helloworld/.crossbar'
在当前目录生成一个 .crossbar
目录,并包涵一个 config.json 的默认配置
[root@orangleliu helloworld]# crossbar start
2016-08-05T00:27:46+0800 [Controller 13433] Automatically choosing optimal Twisted reactor
2016-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.0
2016-08-05T00:27:47+0800 [Controller 13433] Node Public Key: dbdc15e38c8e8d5ea53fb51ad1234affedcfd2e55480e6408ff69ff173e47653
2016-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就能完成很多工作了。
这玩意的性能和工业案例有吗?
官网上给了几个,不过看起来都不熟悉