node适合做长连接的游戏服务器吗?
发布于 3天前 作者 HelloKevinTian 281 次浏览 来自 问答

各位,nodejs做长连接游戏服务器可以吗,性能如何?

有公司真的这么搞嘛?

我不太懂这一块,谢谢大家。

12 回复

长连接都是操作内存,又不是操作数据库,性能不是问题,主要的问题是内存泄露 nodejs重启以后,长连接的现场环境又消失了,要检查内存泄露很困难

@yakczh 所以很多公司不采用?

@HelloKevinTian 采用不采用取决于看能不能hold住, 最可怕的是象股市里大妈看着庄家拉抬股市,自己也跟着狂买

nodejs的优势是io频繁的场景,避免性能浪费在等待io上,结果好了再回来。例如http服务器。如果非得用node写,最好用一个c的Gateway维护连接,逻辑node来写

我简单搜资料做了一个对比,nodejs担负能承载几百人,c++能承载上千,这应该是一个原因

http://centminmod.com/siegebenchmarks/2013/020313/ 4个node 600并发下能承载4000请求每秒 4个nginx worker 600并发能承载2000请求每秒

@HelloKevinTian 资料能分享下么?对比的环境是什么?

我个人认为一般水平的C++肯定是干不过node的,但是水平相当的话,node肯定不如c,node与v8交互需要多次不必要的内存copy,这对性能消耗是很明显的。v8和c在性能上还有差距的。

游戏应用场景和web是非常不同的,游戏主要消耗计算资源,web主要消耗io资源,node更擅长io。

网易会告诉你的,pomelo

为什么会不适合呢,nodejs 本身架构 和游戏服务器的设计非常相似,如果担心内存问题,可以使用外部缓存服务器 redis,落地使用 数据库就好,他本身的IO异步特性对于游戏这种CRUD频繁的需求很适用才对。另外,如果工程化的 也建议使用typescript这种强类型的编译语言,至少在编译过程能解决你很多问题。你会发现以往用c++写起来很麻烦的,现在用node都很轻松,以往你要清楚如果用c++实现一套异步的IO流程 还是比较麻烦的,然node这块native就是如此。当然问题也是有的,如果习惯了同步写法,使用node时候要注意不少异步问题,当然这个你写多了 就清楚了。例如:n个连接读取一个玩家数据,这时候缓存中未命中,需要从db中读取,那这时候你就需要做下异步控制。希望能帮到你。

@yakczh 这是测试http的. 是短连接… Nginx要维护连接池,当然比node慢.

回到顶部