本文是翻译的git上hpfeeds项目
关于
hpfeeds是一个轻量级的、需要认证的、支持任意的二进制载荷的公开协议。推送(feeds)支持任意的二进制载荷,且根据频道划分成不同的种类。这意味着
频道的使用者必须决定数据的传输结构,例如,可以选择一个序列化格式。
进入频道需要一个所谓的“授权钥匙”,该钥匙是由一对id和secret决定,发送到服务器的secret映射到一个连接。通过这种方式,任何窃听者都不能获得有效的
凭证。当然了,该协议可以运行在SSL/TLS之上。
为了支持多数据源和数据池,对于每一个用户,在他们用账户登录后,我们通过Web界面管理“授权钥匙”。账户在Web需要数据推送时,仅仅需要“授权钥匙”,
不同的钥匙会被赋予不同的频道权限。
安装
git clone https://github.com/rep/hpfeeds/
cd hpfeeds
python setup.py build
python setup.py install
有线协议
每个消息都含有一个消息头,参数(length, data)决定了消息类型。
例如,公共消息包含了消息头、长度(client_id)、client id、length(频道名字)、频道名、载荷,载荷可以使任意的二进制数据,在有线网上,它看起来像这样:
消息类型
- error (0): errormessage
- info (1): server name, nonce
- auth (2): client id, sha1(nonce+authkey)
- publish (3): client id, channelname, payload
- subscribe (4): client id, channelname
- For further details and definition of each message type, consider the page about the example CLI which describes how to speak the wire protocol.
认证
- 服务器针对每一个连接发送一个随机数
- 客户端发送id和sha1(随机数+"授权钥匙")散列
- 服务器通过id查找"授权钥匙"并检查散列值
- 服务器查找该客户端订阅/发布的ACL