一、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