Sheppard Y

keep thinking keep coding.

node.js手游服务器调研

2016-07-08 日更新 
此篇博客已经迁移到新博客,并做行文检查和优化排版:
http://blog.clawz.me/2013/08/12/13-nodejs-mobile-game-server-research/

 


一、node.js能做啥

    http://www.infoq.com/cn/articles/what-is-nodejs

 

二、杂项问题

1. http的长连接是不是也是只能req/rep模式,能实现服务器端push吗?

    http的长连接即HTTP keep-alive(HTTP1.1里加入),这个原生的只是为了更少的建立和关闭tcp链接,可以减少网络流量;因为已建立的tcp握手,减少后续请求的延时等。这个http长连接不支持全双工通信。

    http实现“服务器推”的技术,一是借助客户端Flash XMLSocket或者Java Applet套接口来实现;另一种是comet技术。(还有一种遭罪的客户端以一定间隔向服务器发出请求的轮询就不提了)

    comet有两种:

        (1)基于AJAX的长轮询(long-polling技术)

        (2)基于 Iframe 及 htmlfile 的流(streaming)方式

    这两种方式看描述已经离手游服务器差远了,就不去招惹它们了吧。

 

2. 大规模网站的架构?怎么做到水平扩展的?

    网站的需求跟游戏不一样,网站都是http就够了,req/rep即可,没有交互等广播同步之类的复杂状态。

    (pomelo里表示游戏的业务模型很难做到传统网站那种无限水平扩展)

 

3. websocekt是什么?

    html5开始提供的,为了使浏览器和服务器间进行全双工通讯的长链接协议。websocket协议本质上是一个基于TCP的长连接协议。与传统C/S长连接的区别在于,websocket链接开始时的握手协议,客户端首先要向服务器发起一个HTTP骑牛,这个请求和通常的HTTP请求不同,包含了一个附加信息"Upgrade:WebSocket"表明申请协议升级,服务器回应后,即握手完成,websocket链接建立起来,双方自由通信,直到一方关闭链接。

    websocket相对于http的优点,除了全双工通讯,还有服务器与客户端交换的header信息很小。

    websocket与传统socket的区别,前者有帧协议,不需要上层做拼包了。

 

4. redis可以直接搞集群吗?

    数据量太大时,redis的持久化会影响性能,解决方案时用个slave专职做持久化。另外redis容灾和传统web应用的减压,就开多个slave,用于分担读的压力。

    当库到一定数量时,可以用分库分表来水平扩展。 

 

5. node.js能用c++扩展吗?

    v8和node都是c++写的。

 

三、网易pomelo能干些啥

    分布式服务器,方便扩展。另外实现了很多游戏常用模块,如aoi等。

 

四、公司的node.js框架有哪些不能做的

1. websocket实现了吗?

    实现中。

2. 方便分布式扩展吗?

    貌似没有pomelo那么方便。 

 

五、总结

    ​node.js做手游服务器的开发还是挺方便的,pomelo已经做很多事情……

 

N、参考

1. Comet:基于 HTTP 长连接的“服务器推”技术:http://www.ibm.com/developerworks/cn/web/wa-lo-comet/

2. WebSocket:http://zh.wikipedia.org/wiki/WebSocket

3. 使用 HTML5 WebSocket 构建实时 Web 应用:http://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/

4. pomelo:https://github.com/NetEase/pomelo

5. HTTP长连接:http://www.blogjava.net/xjacker/articles/334709.html

6. Redis复制与可扩展集群搭建:http://www.infoq.com/cn/articles/tq-redis-copy-build-scalable-cluster

posted on 2013-08-12 17:21 Sheppard Y 阅读(3805) 评论(2)  编辑 收藏 引用 所属分类: 设计架构nodejs

评论

# re: node.js手游服务器调研 2013-10-07 21:38 Kevin Lynx

我记得node.js有个包装了websocket的库(不支持websocket的会有模拟)

ps, http://socket.io/ socket.io  回复  更多评论   

# re: node.js手游服务器调研 2013-10-08 15:13 Sheppard Y

@Kevin Lynx
恩,node.js的websocket底层库是有的。我随笔里写的是指我们公司那套框架里是否支持(使用)了websocket,之前只支持(使用)了http。
后来我这个项目没有管websocket了,用了原生socket。:)  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2013年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

留言簿(1)

随笔分类(77)

随笔档案(58)

me

基友

同行

业界前辈

最新随笔

搜索

积分与排名

最新评论

阅读排行榜