狠狠撸

狠狠撸Share a Scribd company logo
论实时应?用开发的『正确』姿势
Rainbow—基于Tornado打造的?长连接代理服务器
jeffkit@hoge.cn
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
对于@jeff_kit
- 珠三?角技术沙?龙化?石组委
- 连续(未成功 -_|||)创业者
- 厚建云计算??广州公司总经理
- 略懂Python,?长?大后想当全栈多 妻 栖?工程师
- PyCon?老朋友
2
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
懒 3
北京/上海/??广州 0xFF Life's pathetic, go Pythonic! 4
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
对于实时(?长连接)应?用
智能?手机推送
即时聊天
监控仪表板
etc …
5
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
对于Socket 编程
异步的编程模型
管理?长连接的状态
保证消息传输的可靠性
6
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
不容易
7
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
寻找最偷懒的开发?方式
像HTTP应?用那样简单!
客户端:Request/Response模式
服务端:写RESTFUL API
业务逻辑随时更新,不影响?用户连接
8
北京/上海/??广州 0xFF Life's pathetic, go Pythonic! 9
MQTT ?ZeroMQ?
MQTT / ZeroMQ
Web
Mobile
BIZ SRVServer
HTTPPub/Sub
Pub/Sub
Pub/Sub
Auth
Handler
InProc://
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
Why not!
编写专有的鉴权系统
Pub/Sub系统所有客户端平等
以致于服务端没有上帝视?角
服务端不能控制客户端
10
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
?心中的她...
11
Her
Web
Mobile
BIZ SRV
Req/Rsp
Req/Rsp
Connect
Close
Forward
make client sub/unsub
Send to a channel
HTTP
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
消息的关键概念
消息类型,类?比HTTP的URL
消息内容,类?比HTTP的参数
12
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
基于WebSocket
TCP+,轻
但,完整:?心跳,装拆消息包
?支持Web接?入
成熟、流?行
13
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
借鉴MQTT的QoS
消息Quality of Service 三个级别
级别 0:最多只发?一次,不管是否成功
级别 1:保证?至少成功送达?一次
级别 2:保证有且只成功送达?一次
14
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
协议格式
15
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
命令类型
PACKET_SEND
PACKET_ACK # for QoS=1
PACKET_REC # for QoS=2
PACKET_REL # for QoS=2
PACKET_COM # for QoS=2
16
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
站在Tornado的肩膀上
?面向?高并发的异步IO Socket开发框架
在FriendFeed,Facebook内久经考验
内置WebSocket实现、定时器等
17
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
她叫Rainbow
18
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
这样写客户端
19
Objective-C
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
这样写客户端
20
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
?老湿,整?一聊天Demo吧
21
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
pip install rainbow-server
22
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
rainbow.ini
23
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
rainbow-server -f rainbow.ini
24
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
pip install rainbow-django
25
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
服务端代码
26
北京/上海/??广州 0xFF Life's pathetic, go Pythonic! 27
北京/上海/??广州 0xFF Life's pathetic, go Pythonic! 28
北京/上海/??广州 0xFF Life's pathetic, go Pythonic! 29
主要JS代码
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
服务器集群
零配置,内??网?自动发现机制
TCP Port:1984 - ~
UDP Port:2014 - ~
??网内?支持多个独?立集群,cluster_name
30
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
http://rainbow/serverinfo/
31
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
BenchMark(1G内存单核 )
32
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
感谢
同事们: 智丰、升爷、亮、理天、Nick
社区伙伴:?老潘、邱?文武、婷姐@techparty
微信群:??广州技术宅饭醉团伙
33
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
北京/上海/??广州 0xFF Life's pathetic, go Pythonic!
讨论
35

More Related Content

基于罢辞谤苍补诲辞打造通用长链接代理服务器