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 相关文章推荐
JS判断字符串包含的方法
May 05 Javascript
浅谈JavaScript中的作用域和闭包问题
Jul 07 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
Aug 04 Javascript
ES6的新特性概览
Mar 10 Javascript
JS本地刷新返回上一页代码
Jul 25 Javascript
vue2.0多条件搜索组件使用详解
Mar 26 Javascript
JQuery实现图片轮播效果
May 08 jQuery
react-native fetch的具体使用方法
Nov 01 Javascript
node下使用UglifyJS压缩合并JS文件的方法
Mar 07 Javascript
Bootstrap Table实现定时刷新数据的方法
Aug 13 Javascript
vue+express+jwt持久化登录的方法
Jun 14 Javascript
解决layui页面按钮点击无反应,也不报错的问题
Sep 29 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安装问题
2006/10/09 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
常用PHP封装分页工具类
2017/01/14 PHP
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
js数字转换为float,取N位小数
2014/02/08 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
Vue.js基础知识小结
2017/01/13 Javascript
在 Node.js 中使用原生 ES 模块方法解析
2017/09/19 Javascript
Mac下安装vue
2018/04/11 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
Python 的AES加密与解密实现
2019/07/09 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
Python调用接口合并Excel表代码实例
2020/03/31 Python
python中pop()函数的语法与实例
2020/12/01 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
Django自带的用户验证系统实现
2020/12/18 Python
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
求职信内容考虑哪几点
2013/10/05 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
绿色环保演讲稿
2014/05/10 职场文书
廉洁教育学习材料
2014/05/19 职场文书
党的群众路线个人对照检查材料
2014/09/23 职场文书
会计求职信怎么写
2015/03/20 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python
python双向链表实例详解
2022/05/25 Python