- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用nodejs打造comet系统
Keyword:nodejs、comet、nginx、socketIO
Comet
服务器端推(push)或者浏览器端拉(pull),无需用户的显示操作
获取实时信息
浏览器端获取信息的成本控制
兼容多浏览器
应用于微博、聊天系统(webIM)
client
server
open
close
close
open
New data
New data
open
close
New data
close
New data
没有新的数据,则阻塞请求
Client处理时server端有数据到达
data0
close
open
data1
data0+data1
Re-open
close
连接超时重连
client
server
pull
push
Comet连接方式
Websocket flashsocket
Xhr-polling xhr-multipart
Streaming [readytstate=3 Iframe]
Jsonp-polling
Flashsocket
Flash 提供了 XMLSocket 类。
JavaScript 和 Flash 的紧密结合:在 JavaScript 可以直接调用 Flash 程序提供的接口。
客户端必须安装 Flash 播放器;
因为 XMLSocket 没有 HTTP 隧道功能,XMLSocket 类不能自动穿过防火墙;
因为是使用套接口,需要设置一个通信端口,防火墙、代理服务器也可能对非 HTTP 通道端口进行限制;
参考资料: /developerworks/cn/web/wa-lo-comet/
Xhr跨域
Access-Control-Allow-Origin
Access-Control-Allow-Credentials
IE8+(XDomainRequest)、 ff3+都已支持
参考资料: /hg/cors/raw-file/tip/Overview.html#syntax
/En/HTTP_access_control
Xhr-multipart
ContentType为multipart/x-mixed-replace
使用Gecko内核的浏览器中支持(firefox)
demo
都是已经比较成熟的方案!
该选用哪种方式好呢?
口碑网的需求
生活圈概念
展示生活圈内店铺的优惠卷、团购、外卖信息
实时展现最新的动态信息(Comet)
演示地址:/local/storeOfferList.html(外网comet暂无开放)
平稳退化 渐进增强
socketIO
支持多种连接方式,兼容多浏览器
精力可以更多放在业务逻辑
基于nodejs
/LearnBoost/socket.io
Client
Server
是否支持websocket
是否支持flash
是否跨域是否支持xhr跨域
http
websocket
flashsocket
check
cookie
Websocket、flashsocket
监听server的request事件..初始化对应的连接方式的server端
Request.end();
Response.write(data);
接受数据并处理
需要注意的问题
保持与mysql数据源的socket连接
保证单线程语言的稳定运行
Nginx的buffer 影响
负载均衡
减小对mysql的压力
负载均衡
Nginx upstream proxy_pass
http 反向代理是原生支持
tcp_proxy_module 第三方扩展支持websocket
ps: tcp 和 http 不能listen同一个端口
HAProxy
Nginx buffer
Nginx的优化:反向代理 时,数据量小的连接被buffer.
proxy_buffering off
Cache减少对mysql压力
一个用户获取实时信息需进行多次请求,一次请求的成本=socket传输+sql查询
高并发时避免重复sql查询
(K,V)缓存查询条件对应的sql查询结果
1、大型应用可使用专业的redis
2、nodejs原生实现cache功能
Redis
Mysql
Notify消息
消息收集
Nodejs Comet Server
内存cache
Nginx with tcp_proxy_module
HAProxy
负载均衡
业务逻辑
源数据KV存储
业务数据收集
Comet client
写入
websocket
Xhr-polling
Xhr-multipart
Jsonp-polling
others
THE END
Q A
@牛小腩
文档评论(0)