AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

论实时应⽤用开发的『正确』姿势 Rainbow—基于Tornado打造的⻓长连接代理服务器 by jeff_kit

发布者 pyconf   简介 PyChina 大会
发布于 1447030057309  浏览 2501 关键词 Python, 框架 
分享到

第1页

论实时应⽤用开发的『正确』姿势

Rainbow—基于Tornado打造的⻓长连接代理服务器 jeffkit@hoge.cn



第2页

关于@jeff_kit

- 珠三⾓角技术沙⻰龙化⽯石组委 - 连续(未成功 -_|||)创业者 - 厚建云计算⼲⼴广州公司总经理 - 略懂Python,⻓长⼤大后想当全栈多 妻 栖⼯工程师 - PyCon⽼老朋友



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第3页





北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第4页

北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第5页

关于实时(⻓长连接)应⽤用

智能⼿手机推送 即时聊天 监控仪表板 etc …



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第6页

关于Socket 编程

异步的编程模型 管理⻓长连接的状态 保证消息传输的可靠性

北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第7页

不容易



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第8页

寻找最偷懒的开发⽅方式

像HTTP应⽤用那样简单! 客户端:Request/Response模式 服务端:写RESTFUL API 业务逻辑随时更新,不影响⽤用户连接



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第9页

MQTT ?ZeroMQ?



Web



Pub/Sub



Pub/Sub

Mobile



Pub/Sub



MQTT / ZeroMQ



Server



InProc://

Auth Handler



HTTP



BIZ SRV



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第10页

Why not!

编写专有的鉴权系统 Pub/Sub系统所有客户端平等 以致于服务端没有上帝视⾓角 服务端不能控制客户端

北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第11页

⼼心中的她...



Web



Req/Rsp



Req/Rsp



Her



Mobile



Connect Close Forward

make client sub/unsub Send to a channel

HTTP



BIZ SRV



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第12页

消息的关键概念

消息类型,类⽐比HTTP的URL 消息内容,类⽐比HTTP的参数



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第13页

基于WebSocket

TCP+,轻 但,完整:⼼心跳,装拆消息包 ⽀支持Web接⼊入 成熟、流⾏行

北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第14页

借鉴MQTT的QoS

消息Quality of Service 三个级别 级别 0:最多只发⼀一次,不管是否成功 级别 1:保证⾄至少成功送达⼀一次 级别 2:保证有且只成功送达⼀一次



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第15页

协议格式



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第16页

命令类型

PACKET_SEND PACKET_ACK # for QoS=1 PACKET_REC # for QoS=2 PACKET_REL # for QoS=2 PACKET_COM # for QoS=2

北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第17页

站在Tornado的肩膀上

⾯面向⾼高并发的异步IO Socket开发框架 在FriendFeed,Facebook内久经考验 内置WebSocket实现、定时器等



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第18页

她叫Rainbow



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第19页

这样写客户端



Objective-C



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第20页

这样写客户端



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第21页

⽼老湿,整⼀一聊天Demo吧



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第22页

pip install rainbow-server



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第23页

rainbow.ini



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第24页

rainbow-server -f rainbow.ini



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第25页

pip install rainbow-django



北京/上海/⼲⼴广州 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!





第30页

服务器集群

零配置,内⺴⽹网⾃自动发现机制 TCP Port:1984 - ~ UDP Port:2014 - ~ ⺴⽹网内⽀支持多个独⽴立集群,cluster_name



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第31页

http://rainbow/serverinfo/



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第32页

BenchMark(1G内存单核 )



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第33页

感谢

同事们: 智丰、升爷、亮、理天、Nick 社区伙伴:⽼老潘、邱⽂文武、婷姐@techparty 微信群:⼲⼴广州技术宅饭醉团伙



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





第34页

北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!



第35页

讨论



北京/上海/⼲⼴广州 0xFF Life's pathetic, go Pythonic!





支持文件格式:*.ppt, *.pptx, *.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。