Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
基于Tornado打造通用长链接代理服务器
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Leo
December 25, 2015
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
基于Tornado打造通用长链接代理服务器
Leo
December 25, 2015
More Decks by Leo
See All by Leo
简单实用的自制Rest API工具
nerd
0
330
Luiti 来构建数据仓库
nerd
0
140
py + gi - 高效 C 庫整合方案
nerd
0
68
Python的数据工具箱
nerd
1
120
柔性数据接口的设计与实现.pdf
nerd
0
82
Featured
See All Featured
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
540
Designing for humans not robots
tammielis
254
26k
Automating Front-end Workflow
addyosmani
1369
210k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
630
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
The Invisible Side of Design
smashingmag
301
52k
Design in an AI World
tapps
1
350
Transcript
论实时应⽤用开发的『正确』姿势 Rainbow—基于Tornado打造的⻓长连接代理服务器
[email protected]
北京/上海/⼲⼴广州 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 SRV Server HTTP Pub/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