[关闭]
@orangleliu 2016-08-18T18:28:41.000000Z 字数 3113 阅读 2246

基于WAMP的Crossbario 安装入门

物联网 wamp


简单学习和使用WAMP协议,Router 是crossbario, Client是Autobahn, 了解运作的流程。

测试环境是Centos6 虚拟机一台 目录为 /data/wamp/ ,用的是Python 2的版本,主要就是参考文档(其他地方也没有什么资料)

关于router和client library有很多语言的实现,Python比较熟悉,所以都是用Python的版本。

原理性知识

这两个组建官网都有详细的原理介绍,建议先看一遍。
crossbario 支持 PubSub模式 和 rRPC 模式 两种模式。
autobahn 是client端,它跟 crossbar 交互使用的协议叫做 WAMP 协议(基于 Websocket 的上层协议), 它是基于 Twisted 或者是 Asyncio(py3)的,教程中两种方式都有写, 我用的是Twisted版本。

Where to start 入门文章的小列表
websocket 案例 很多经典的问题,还没用到 crossbario
WAMP 编程 这是重点,看明白,跑通案例。

Crossbar 启动

Crossbar 主要的操作就是启动,停止和配置,他是封装好的服务端。

  1. [root@orangleliu helloworld]# crossbar init
  2. Automatically choosing optimal Twisted reactor
  3. Running on Linux and optimal reactor (epoll) was installed.
  4. Initializing application template 'default' in directory '/data/wamp/helloworld'
  5. Using template from '/opt/rh/python27/root/usr/lib/python2.7/site-packages/crossbar/templates/default'
  6. Creating directory /data/wamp/helloworld/.crossbar
  7. Creating file /data/wamp/helloworld/.crossbar/config.json
  8. Application template initialized
  9. To start your node, run 'crossbar start --cbdir /data/wamp/helloworld/.crossbar'

在当前目录生成一个 .crossbar 目录,并包涵一个 config.json 的默认配置

  1. [root@orangleliu helloworld]# crossbar start
  2. 2016-08-05T00:27:46+0800 [Controller 13433] Automatically choosing optimal Twisted reactor
  3. 2016-08-05T00:27:46+0800 [Controller 13433] Running on Linux and optimal reactor (epoll) was installed.
  4. 2016-08-05T00:27:47+0800 [Controller 13433] New node key generated!
  5. 2016-08-05T00:27:47+0800 [Controller 13433] __ __ __ __ __ __ __ __
  6. 2016-08-05T00:27:47+0800 [Controller 13433] / `|__)/ \/__`/__`|__) /\ |__) |/ \
  7. 2016-08-05T00:27:47+0800 [Controller 13433] \__,| \\__/.__/.__/|__)/~~\| \. |\__/
  8. 2016-08-05T00:27:47+0800 [Controller 13433]
  9. 2016-08-05T00:27:47+0800 [Controller 13433] Crossbar.io Version: 0.13.0
  10. 2016-08-05T00:27:47+0800 [Controller 13433] Node Public Key: dbdc15e38c8e8d5ea53fb51ad1234affedcfd2e55480e6408ff69ff173e47653
  11. 2016-08-05T00:27:47+0800 [Controller 13433]
  12. 2016-08-05T00:27:47+0800 [Controller 13433] Running from node directory '/data/wamp/helloworld/.crossbar'
  13. 2016-08-05T00:27:47+0800 [Controller 13433] Controller process starting (CPython-EPollReactor) ..
  14. 2016-08-05T00:27:47+0800 [Controller 13433] Node configuration loaded from 'config.json'

启动服务器,读取配置,并开始监听

Client端

Components 的概念,就是组建,是RPC 的调用和被调用方,也可以是 PubSub的发布和订阅方,四种角色都是组件,在这个前提下写应用code。

RPC模型

3个角色 Caller, Callee, Dealer

RPC模型主要有个两个步骤,注册程序,调用程序。

现在问题是,我写好了RPC的程序,怎么注册到router里面呢?是在crossbar中自动生成,还是要手动改配置文件等?

其实都不是,都是由 Components自己去注册,其他Componets来自己使用。具体的操作类似 Callee程序连接 crossbar, 然后注册自己能给别人提供的API,然后Caller 连接 Router crossbario 调用程序,如果 Callee 掉线了,那么 Caller 也就无法调用了。

PubSub 模型

有3个角色 Publisher, Subscriber, Broker

Publiser(发布者)提供 url和对应的 payload, Subscribers 订阅者可以接收到发布者的信息。Broker就是提供发布和订阅的场所。跟我们大多数的消息队列中提供的发布订阅模式类似.

基于入门教程 WAMP programming 写了一遍,大概有感性的认识。

思考

如果是1w台设备的管理,有定时上报信息,有控制设备端的指令,怎么设计呢?

设备主动通信的时候,使用RPC,服务端提供通用的接口就行了。
服务端主动通信的时候就需要使用PubSub,这样可以及时把消息push到设备上。
服务端性能要求比较高,对于设备端可以简单的实现协议,然后封装API就能完成很多工作了。

这玩意的性能和工业案例有吗?
官网上给了几个,不过看起来都不熟悉

Pycon2016 的ppt

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注