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入门教程(3) js面向对象
Jan 31 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
Mar 02 Javascript
高性能Javascript笔记 数据的存储与访问性能优化
Aug 02 Javascript
node.js中的path.sep方法使用说明
Dec 08 Javascript
利用原生JS自动生成文章标题树的实例
Aug 22 Javascript
jQuery实现简单的网页换肤效果示例
Sep 18 Javascript
javascript 显示全局变量与隐式全局变量的区别
Feb 09 Javascript
详解JS中遍历语法的比较
Apr 07 Javascript
Vue的轮播图组件实现方法
Mar 03 Javascript
javascript 模块依赖管理的本质深入详解
Apr 30 Javascript
详解Node.JS模块 process
Aug 31 Javascript
JS实现简单控制视频播放倍速的实例代码
Apr 18 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生成静态页面的简单示例
2014/04/17 PHP
PHP把小数转成整数3种方法
2014/06/30 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
js charAt的使用示例
2014/02/18 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
Python中Collection的使用小技巧
2014/08/18 Python
python解析xml文件操作实例
2014/10/05 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
利用python代码写的12306订票代码
2015/12/20 Python
Python 将pdf转成图片的方法
2018/04/23 Python
python实现旋转和水平翻转的方法
2018/10/25 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
Python实现点阵字体读取与转换的方法
2019/01/29 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
django实现模型字段动态choice的操作
2020/04/01 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
医学毕业生自我鉴定
2013/10/30 职场文书
学院党的群众路线教育实践活动整改方案
2014/10/04 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
投资意向协议书
2015/01/29 职场文书
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle
python 实现图片特效处理
2022/04/03 Python