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 相关文章推荐
VBS通过WMI监视注册表变动的代码
Oct 27 Javascript
常见表单重复提交问题整理及解决方法
Nov 13 Javascript
jQuery aminate方法定位到页面具体位置
Dec 26 Javascript
简介JavaScript中toUpperCase()方法的使用
Jun 06 Javascript
sso跨域写cookie的一段js脚本(推荐)
May 25 Javascript
js 上传文件预览的简单实例
Aug 16 Javascript
jQuery增加、删除及修改select option的方法
Aug 19 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
Feb 24 Javascript
使用async、enterproxy控制并发数量的方法详解
Jan 02 Javascript
vue js秒转天数小时分钟秒的实例代码
Aug 08 Javascript
javascript实现鼠标点击生成文字特效
Dec 24 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
Jul 28 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
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
PHP7引入的"??"和"?:"的区别讲解
2019/04/08 PHP
alixixi runcode.asp的代码不错的应用
2007/08/08 Javascript
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
2013/06/06 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
js实现a标签超链接提交form表单的方法
2015/06/24 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
详解在Vue.js编写更好的v-for循环的6种技巧
2020/04/14 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
python数据结构树和二叉树简介
2014/04/29 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
python日志模块logbook使用方法
2019/09/19 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
Servlet如何得到服务器的信息
2015/12/22 面试题
求职信内容考虑哪几点
2013/10/05 职场文书
党校学习思想汇报
2014/01/06 职场文书
市场部规章制度
2014/01/24 职场文书
《陈毅探母》教学反思
2014/05/01 职场文书
农村文化活动总结
2014/08/28 职场文书
有限责任公司股东合作协议书范本
2014/10/30 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书
在职证明范本
2015/06/15 职场文书
医院感染管理制度
2015/08/05 职场文书
nginx刷新页面出现404解决方案(亲测有效)
2022/03/18 Servers