SlideShare a Scribd company logo
1 of 35
Download to read offline
论实时应⽤用开发的『正确』姿势
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

Similar to 基于Tornado打造通用长链接代理服务器

Python安全编码
Python安全编码Python安全编码
Python安全编码Leo Zhou
 
Python在移动社交平台中的应用
Python在移动社交平台中的应用Python在移动社交平台中的应用
Python在移动社交平台中的应用Leo Zhou
 
2010,我的技术之选
2010,我的技术之选2010,我的技术之选
2010,我的技术之选勇浩 赖
 
第一讲 机器学习概述
第一讲 机器学习概述第一讲 机器学习概述
第一讲 机器学习概述juzihua1102
 
Pyramid框架介绍
Pyramid框架介绍Pyramid框架介绍
Pyramid框架介绍panjunyong
 
Python的module机制与最佳实践
Python的module机制与最佳实践Python的module机制与最佳实践
Python的module机制与最佳实践Leo Zhou
 
Python和web开发
Python和web开发Python和web开发
Python和web开发moonbingbing
 
100902 wm4wps-py-webdev
100902 wm4wps-py-webdev100902 wm4wps-py-webdev
100902 wm4wps-py-webdevZoom Quiet
 
Summary conversatio-python-group-dalian
Summary conversatio-python-group-dalianSummary conversatio-python-group-dalian
Summary conversatio-python-group-dalianwangyuanyi
 
Pycontw2013x
Pycontw2013xPycontw2013x
Pycontw2013xweijr
 
Auto Choose Connect With QR Code for SITCON 2014
Auto Choose Connect With QR Code for SITCON 2014Auto Choose Connect With QR Code for SITCON 2014
Auto Choose Connect With QR Code for SITCON 2014syneart
 
110929 kn-手机软件测试
110929 kn-手机软件测试110929 kn-手机软件测试
110929 kn-手机软件测试Zoom Quiet
 

Similar to 基于Tornado打造通用长链接代理服务器 (12)

Python安全编码
Python安全编码Python安全编码
Python安全编码
 
Python在移动社交平台中的应用
Python在移动社交平台中的应用Python在移动社交平台中的应用
Python在移动社交平台中的应用
 
2010,我的技术之选
2010,我的技术之选2010,我的技术之选
2010,我的技术之选
 
第一讲 机器学习概述
第一讲 机器学习概述第一讲 机器学习概述
第一讲 机器学习概述
 
Pyramid框架介绍
Pyramid框架介绍Pyramid框架介绍
Pyramid框架介绍
 
Python的module机制与最佳实践
Python的module机制与最佳实践Python的module机制与最佳实践
Python的module机制与最佳实践
 
Python和web开发
Python和web开发Python和web开发
Python和web开发
 
100902 wm4wps-py-webdev
100902 wm4wps-py-webdev100902 wm4wps-py-webdev
100902 wm4wps-py-webdev
 
Summary conversatio-python-group-dalian
Summary conversatio-python-group-dalianSummary conversatio-python-group-dalian
Summary conversatio-python-group-dalian
 
Pycontw2013x
Pycontw2013xPycontw2013x
Pycontw2013x
 
Auto Choose Connect With QR Code for SITCON 2014
Auto Choose Connect With QR Code for SITCON 2014Auto Choose Connect With QR Code for SITCON 2014
Auto Choose Connect With QR Code for SITCON 2014
 
110929 kn-手机软件测试
110929 kn-手机软件测试110929 kn-手机软件测试
110929 kn-手机软件测试
 

More from Leo Zhou

第三名 3rd zhyict
第三名 3rd zhyict第三名 3rd zhyict
第三名 3rd zhyictLeo Zhou
 
异常检测在苏宁的实践
异常检测在苏宁的实践异常检测在苏宁的实践
异常检测在苏宁的实践Leo Zhou
 
第二名 2nd 火眼金睛
第二名 2nd 火眼金睛第二名 2nd 火眼金睛
第二名 2nd 火眼金睛Leo Zhou
 
第四名 4th H3C AI Institute
第四名 4th H3C AI Institute第四名 4th H3C AI Institute
第四名 4th H3C AI InstituteLeo Zhou
 
第一名 1st Bocoiops
第一名 1st Bocoiops第一名 1st Bocoiops
第一名 1st BocoiopsLeo Zhou
 
第六名 6th Aurora
第六名 6th Aurora第六名 6th Aurora
第六名 6th AuroraLeo Zhou
 
AI使能网络自动驾驶 AI Building Autonomous Driving Network
AI使能网络自动驾驶 AI Building Autonomous Driving NetworkAI使能网络自动驾驶 AI Building Autonomous Driving Network
AI使能网络自动驾驶 AI Building Autonomous Driving NetworkLeo Zhou
 
2.2 go在阿里云cdn系统的应用
2.2 go在阿里云cdn系统的应用2.2 go在阿里云cdn系统的应用
2.2 go在阿里云cdn系统的应用Leo Zhou
 
1.6 米嘉 gobuildweb
1.6 米嘉 gobuildweb1.6 米嘉 gobuildweb
1.6 米嘉 gobuildwebLeo Zhou
 
1.4 go在数据存储上面的应用—毛剑
1.4 go在数据存储上面的应用—毛剑1.4 go在数据存储上面的应用—毛剑
1.4 go在数据存储上面的应用—毛剑Leo Zhou
 
1.2 刘奇 go在分布式数据库中的应用
1.2 刘奇 go在分布式数据库中的应用1.2 刘奇 go在分布式数据库中的应用
1.2 刘奇 go在分布式数据库中的应用Leo Zhou
 
Protocol libraries the right way
Protocol libraries the right wayProtocol libraries the right way
Protocol libraries the right wayLeo Zhou
 
美团数据库运维平台介绍
美团数据库运维平台介绍美团数据库运维平台介绍
美团数据库运维平台介绍Leo Zhou
 
特卖场景下的大数据平台和机器学习实践
特卖场景下的大数据平台和机器学习实践特卖场景下的大数据平台和机器学习实践
特卖场景下的大数据平台和机器学习实践Leo Zhou
 
我的互联网运维理论与实践
我的互联网运维理论与实践我的互联网运维理论与实践
我的互联网运维理论与实践Leo Zhou
 
如何选择 Docker 监控方案
如何选择 Docker 监控方案如何选择 Docker 监控方案
如何选择 Docker 监控方案Leo Zhou
 
美团数据库运维平台介绍
美团数据库运维平台介绍美团数据库运维平台介绍
美团数据库运维平台介绍Leo Zhou
 
The net is dark and full of terrors - James Bennett
The net is dark and full of terrors - James BennettThe net is dark and full of terrors - James Bennett
The net is dark and full of terrors - James BennettLeo Zhou
 
Hypothesis randomised testing for django
Hypothesis randomised testing for djangoHypothesis randomised testing for django
Hypothesis randomised testing for djangoLeo Zhou
 
NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享
NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享
NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享Leo Zhou
 

More from Leo Zhou (20)

第三名 3rd zhyict
第三名 3rd zhyict第三名 3rd zhyict
第三名 3rd zhyict
 
异常检测在苏宁的实践
异常检测在苏宁的实践异常检测在苏宁的实践
异常检测在苏宁的实践
 
第二名 2nd 火眼金睛
第二名 2nd 火眼金睛第二名 2nd 火眼金睛
第二名 2nd 火眼金睛
 
第四名 4th H3C AI Institute
第四名 4th H3C AI Institute第四名 4th H3C AI Institute
第四名 4th H3C AI Institute
 
第一名 1st Bocoiops
第一名 1st Bocoiops第一名 1st Bocoiops
第一名 1st Bocoiops
 
第六名 6th Aurora
第六名 6th Aurora第六名 6th Aurora
第六名 6th Aurora
 
AI使能网络自动驾驶 AI Building Autonomous Driving Network
AI使能网络自动驾驶 AI Building Autonomous Driving NetworkAI使能网络自动驾驶 AI Building Autonomous Driving Network
AI使能网络自动驾驶 AI Building Autonomous Driving Network
 
2.2 go在阿里云cdn系统的应用
2.2 go在阿里云cdn系统的应用2.2 go在阿里云cdn系统的应用
2.2 go在阿里云cdn系统的应用
 
1.6 米嘉 gobuildweb
1.6 米嘉 gobuildweb1.6 米嘉 gobuildweb
1.6 米嘉 gobuildweb
 
1.4 go在数据存储上面的应用—毛剑
1.4 go在数据存储上面的应用—毛剑1.4 go在数据存储上面的应用—毛剑
1.4 go在数据存储上面的应用—毛剑
 
1.2 刘奇 go在分布式数据库中的应用
1.2 刘奇 go在分布式数据库中的应用1.2 刘奇 go在分布式数据库中的应用
1.2 刘奇 go在分布式数据库中的应用
 
Protocol libraries the right way
Protocol libraries the right wayProtocol libraries the right way
Protocol libraries the right way
 
美团数据库运维平台介绍
美团数据库运维平台介绍美团数据库运维平台介绍
美团数据库运维平台介绍
 
特卖场景下的大数据平台和机器学习实践
特卖场景下的大数据平台和机器学习实践特卖场景下的大数据平台和机器学习实践
特卖场景下的大数据平台和机器学习实践
 
我的互联网运维理论与实践
我的互联网运维理论与实践我的互联网运维理论与实践
我的互联网运维理论与实践
 
如何选择 Docker 监控方案
如何选择 Docker 监控方案如何选择 Docker 监控方案
如何选择 Docker 监控方案
 
美团数据库运维平台介绍
美团数据库运维平台介绍美团数据库运维平台介绍
美团数据库运维平台介绍
 
The net is dark and full of terrors - James Bennett
The net is dark and full of terrors - James BennettThe net is dark and full of terrors - James Bennett
The net is dark and full of terrors - James Bennett
 
Hypothesis randomised testing for django
Hypothesis randomised testing for djangoHypothesis randomised testing for django
Hypothesis randomised testing for django
 
NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享
NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享
NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享
 

基于Tornado打造通用长链接代理服务器