node.js 游戏长连接用什么nodejs 框架排名

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
专注互联网技术
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
所以最后决定使用单进程,事件驱动的node.js作为服务端,不必每次重新建立进程处理请求,而且可以在有新消息时将消息推给客户端,不必去频繁扫描数据库。但是由于原本系统是基于php+flash socket的,所以一些如:用户信息,聊天室用户列表等,需要node.js异步去php接口获取,这样node.js异步的特性也发挥出来了。我们的整体思路就是这样,上个架构图吧:&简单说明一下:1、 客户端A、B、C、D、E分别连接到了nodejs聊天服务器1-4中,利用长连接等待node.js 聊天服务器返回新消息。2、 客户A向同在一个聊天室的客户B、客户C和客户E,发送了一条 新消息X。3、 Node.js聊天 &服务器 1 &将立即返回给同样长连接在本服务器的客户E和客户A,并且同时异步将 新消息X 转发到node.js数据库接口服务器4、 注意:node.js聊天服务器和node.js数据库接口服务器可以根据业务的处理量选择使用tcp不断连接或是http请求后断开连接5、 Node.js接口服务器同时异步将 新消息X 存入mongodb数据库,并且同时根据 配置的地址池 将新消息广播转发到 node.js聊天服务器集群中。6、 Node.js聊天服务器1-4接收到 新消息X,将 对长连接在本服务器所有客户端信息和消息进行比对,判断是否需要返回 消息X 给长连接在本服务器的客户端,判断下来,客户端D不是消息接收方,node.js聊天服务器4 将 新消息X 抛弃,而B和C都获得了 新消息X。而node.js服务器 1 发现 新消息X 是本服务器发送的,则直接抛弃。7、 & 另外这个 新消息X 中还会带有用户列表心跳包,即时更新用户活跃的时间戳,并且和PHP端保持用户列表的及时更新。说明:长连接等待:表示用户的ajax请求不立即返回,先挂起,等有新消息时再推给客户端。负载均衡:在node.js聊天室服务器前可以部署一个nginx服务器用来做负载均衡,万一其中某一台node.js聊天室服务器宕机了,可以将其业务给其他服务器接管。当然以上的架构比较大,可能部署的服务器比较多。但是扩展性和容错性比较好,属于花中等钱办中等事情。在网站日均pv 1000万以内,这套架构完全可以胜任了,估计以我们公司的业务几年内也突破不了,哈哈!我们还有另外一套花小钱办中事情的方案,简称方案-2。就是利用nginx 的 url_hash 模块,将同一聊天室的请求 反向代理 到同一台node.js聊天服务器,这样就可以将 node.js数据库接口服务器移走,node.js聊天服务器直接入库并且和PHP进行通信。这样节约了服务器,而且由于在同一聊天室的客户端都在同一个服务器内,所以内存共享很容易就做到了,不必将消息转发,提高了效率。不过方案-2有一个严重的隐患,即利用url_hash做负载均衡后,期hash pool中有一台服务器宕机了,其业务并不会交由其他服务器接管,所以风险也较高,虽然可以做一个守护进程自动启动node.js主进程,也在node.js主进程中加入自动启动子进程,但是万一服务器断电了,还是会中断业务。对于方案-1和方案-2需要公司权衡了,想花更少的钱达到同样的目的,那就必须承担一定的风险。不过如果公司业务预计增长很快,而且对于聊天系统的稳定性要求很高,那就不得不选择方案-1了。花絮:在制作整个功能时踩了2个地雷,下面拿出来分享一下:1、在我转发用户新消息时,出于方便,将用户的http请求头都转发了,所以出现PHP服务端返回一直是乱码,后来打印出请求头才发现,原来转发时增加了:“Accept-Encoding :&gzip, deflate”,所以nginx返回了gzip压缩以后的数据,转发时去掉那个http头就可以了。2、在转发时一开始使用了post,结果造成了nginx 411错误,查阅资料发现是post请求的content-length没有设置,设置为POST body的字节数大小即可,当然后来我们改为了GET。
阅读(15716)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'node.js聊天室架构设计',
blogAbstract:'最近公司想在自己的项目中加入node.js项目,公司项目中有一个聊天室的东西,原来是基于flash socket制作的,服务器运营成本比较大,而且需要用户安装flash插件,对于使用ipad等平板用户比较悲剧。公司的项目需要兼容IE6-8,所以web socket无法使用,只能使用常规的comet服务器推技术。而由于PHP在这方面天生短板,如果要服务端使用PHP的话,同时有1000人在一个服务器上聊天,服务器内存会被占用大半,而且频繁的释放建立fastcgi进程也在一定程度上影响效率。并且PHP不支持事件驱动,所以对于服务器推消息,只能去轮询数据库或缓存是否有新消息,这样数据库服务器压力也会倍增。所以最后决定使用单进程,事件驱动的node.js作为服务端,不必每次重新建立进程处理请求,而且可以在有新消息时将消息',
blogTag:'node.js聊天室,聊天室架构,node.js聊天室架构,node.jsmongodb,php聊天室',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:7,
permalink:'blog/static/',
commentCount:14,
mainCommentCount:4,
recommendCount:3,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'专注互联网技术',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}966,690 九月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
网易开源基于Node.js的游戏服务器框架pomelo
网易开源基于Node.js的游戏服务器框架pomelo
被首富的“一个亿”刷屏?不如定个小目标,先把握住的优惠吧!
Author Contacted
相关厂商内容
相关赞助商
更多AWS最新精彩内容和活动,!
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
赞助商链接
架构 & 设计
文化 & 方法
<及所有内容,版权所有 &#169;
C4Media Inc.
服务器由 提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司
京ICP备号-7
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&聚合国内IT技术精华文章,分享IT技术精华,帮助IT从业人士成长
>> 技术文章 >> 正文
Node.JS Web长连接开发实践
浏览: 16181 次
2012年在架构设计上,个人觉得最有价值的表现在3个方面:1. LXC半虚拟化技术在线上环境的使用,解决了Java的端口的问题;2. Nginx-mem-module解决活动期间的并发问题;3. 使用Node.js + Socket.io + Redis 的架构设计开发出来了一个实时通讯的客服系统;由于这些架构设计对于我本来说都需要时间的考验,所以,都没有通过bolg写给大家看。简单的给大家说一下架构选型的原因:1. 使用LXC纯属KVM每次都需要启动虚拟机,LXC使用更加的简单,同时能够解决我们的问题,现在我甚至喜欢上了LXC在宿主机上启动进程的模式。2. Nginx-mem-module的使用是因为活动期间,我们系统挂掉了,在静态文件和nginx+memcached之间我们选择了Nginx-mem-module,后来发现开启keep-alive模式符合我们的预期。3. 作为java程序员,没有选择XMPP协议去开发一个实时通讯客服系统,是因为看到了的实时机制,我很喜欢这个团队实时协助的网站,就拉着人看看的架构,然后借鉴了去开发我们自己的系统。node.js入门比较简单,socket.io解决了大部分浏览器的问题,redis搞定并发。虽然沉淀了半年的时间,但是我依然觉得对问题的看法比较肤浅,所以珠三角2013年活动沙龙聚会我没有给大家讲具体的架构设计,而只是谈谈入门级别的内容,欢迎大家和我探讨。PPT放到slideshare上了,看不到的猛击
本页关键字

我要回帖

更多关于 nodejs orm框架 的文章

 

随机推荐