node.js适合游戏后台开发吗?


Posted in Javascript onSeptember 03, 2014

网站服务器和游戏服务器是怎么样联系到一起的?

1. 游戏分很多种,咱们先来看看MMORPG。

再怎么简单的RPG服务器都免不了处理多人交互的情形,上百人在同一个场景里面,每个客户端都需要收到其他所有人的操作信息。

其次,用户的操作是非常频繁的,一般的服务器倾向于持有长连接。而且这些链接的是频繁交互的,没有明显的持久的分区策略,所以限制了服务器的横向扩展,同一个场景往往只能放在一个物理机上面运行。

再次,端游通常是不敢把逻辑运算放客户端的,用户分分钟给你破解掉,改改金币,刷两件装备再常见不过了。所以这一台地图服务器得验证地图内所有玩家的操作,并计算怪物AI、掉率等一系列业务逻辑。

我们可以看到,传统游戏服务器与网页服务器具有明显的区别,具有长连接、多广播、有复杂的业务逻辑、分区策略受限等独特的业务需求。

2. 咱们在来看看并发带给游戏服务器的好处是什么。

并发实际上是一种程序逻辑流程,他是不需要多核物理支持的。大致意思就是让多个独立的逻辑流看上去像是在同时跑一样。操作系统级别的并发就是多进程多线程模型。让OS处理时钟中断,i\o阻塞等等问题。

对于 服务器 而言,如果任务大部分的时间耗在i\o上,有了并发机制可以避免整个地图服务被i\o访问阻塞。一个任务阻塞的时候,把空余计算资源分配到其他任务上去。在这种情况下,并发是有益于服务器运行效率还有响应时间的。

对于程序员而言,独立的逻辑流意味着可以在一个可靠、简单、松耦合的上下文环境里面,完成自己的任务。

因为让OS处理程序逻辑切换得反复陷入内核,有的人觉得这样太慢,做了一些处于user space的线程,进程内自己控制多个逻辑流。因为语言描述能力的限制,在C/C++上面写还有用这种东西都太麻烦。于是产生了erlang, go, lua里面的coroutine语法糖。

node.js本质上也是自己控制多个逻辑流,但是这个逻辑流是根据i\o状态还有优先级分发的。在实际的实现中,它尽量采用非阻塞异步i\o,单个任务调用i\o的时候,我就停掉它,等i\o完成的信号发上来了,我再重启它。

注意这一点,每次我会运行一个任务,直到它完成或者是发生i\o调用都不会主动切换至其他的程序流。那么如果这一个任务里面涉及过于大量的计算,那么整个地图进程都会被block在这里。

而正因为node.js是异步的,所以需要不断的写回调监听i\o完成的信号。单个任务的逻辑流会多次的被打断。当任务变得相当复杂的时候,即有所谓的callbak hell,会带给调试开发非常大的麻烦。

3. 因为上面的原因,所以我不建议在非原型的MMORPG服务器开发中使用node.js。

4.最近兴起的手游服务器倒是挺适合node.js,因为手游这玩意局限于网络问题,服务器只能做关键数据验证,也没办法处理特别多人交互的情形。服务器端已经简化得跟网页服务器没啥区别了,业务逻辑也简单,处理处理数据,然后持久化就成。

Javascript 相关文章推荐
用javascript实现在小方框中浏览大图的代码
Aug 14 Javascript
javascript 单选框,多选框美化代码
Aug 01 Javascript
Html中JS脚本执行顺序简单举例说明
Jun 19 Javascript
javascript单引号和双引号的区别和处理
May 14 Javascript
Node.js中的process.nextTick使用实例
Jun 25 Javascript
原生JS实现图片轮播效果
Dec 26 Javascript
Vue 2.0 服务端渲染入门介绍
Mar 29 Javascript
vue表单绑定实现多选框和下拉列表的实例
Aug 12 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
Jan 21 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
Jul 18 Javascript
js实现鼠标滑动到某个div禁止滚动
Sep 17 Javascript
js+h5 canvas实现图片验证码
Oct 11 Javascript
浅析Node.js查找字符串功能
Sep 03 #Javascript
Node.js实现在目录中查找某个字符串及所在文件
Sep 03 #Javascript
iframe如何动态创建及释放其所占内存
Sep 03 #Javascript
Javascript正则控制文本框只能输入整数或浮点数
Sep 02 #Javascript
jquery制作select列表双向选择示例代码
Sep 02 #Javascript
一个获取第n个元素节点的js函数
Sep 02 #Javascript
indexOf 和 lastIndexOf 使用示例介绍
Sep 02 #Javascript
You might like
php 三维饼图的实现代码
2008/09/28 PHP
php实现字符串首字母大写和单词首字母大写的方法
2015/03/14 PHP
PHP获取文件行数的方法
2015/06/10 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
js动态给table添加/删除tr的方法
2013/08/02 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
js通过classname来获取元素的方法
2016/11/24 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
Python实现的最近最少使用算法
2015/07/10 Python
Python加载带有注释的Json文件实例
2018/05/23 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
2019/07/18 HTML / CSS
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
输入N,打印N*N矩阵
2012/02/20 面试题
斯福泰克软件测试面试题
2015/02/16 面试题
《木笛》教学反思
2014/03/01 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
放射科岗位职责
2015/02/14 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
端午节寄语2015
2015/03/23 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
2019年教师节祝福语精选,给老师送上真诚的祝福
2019/09/09 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
python实现学员管理系统(面向对象版)
2022/06/05 Python