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 相关文章推荐
jQuery 1.0.4 - New Wave Javascript(js源文件)
Jan 15 Javascript
JS event使用方法详解
Apr 28 Javascript
一个JQuery操作Table的代码分享
Mar 30 Javascript
WEB前端设计师常用工具集锦
Dec 09 Javascript
基于Css3和JQuery实现打字机效果
Aug 11 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
Sep 26 Javascript
vue.js项目打包上线的图文教程
Nov 16 Javascript
Vue.js实现表格渲染的方法
Sep 07 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
Oct 26 Javascript
C#程序员入门学习微信小程序的笔记
Mar 05 Javascript
JQuery特殊效果和链式调用操作示例
May 13 jQuery
详解利用eventemitter2实现Vue组件通信
Nov 04 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中实现简单的ACL 完结篇
2011/09/07 PHP
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
javascript 写类方式之八
2009/07/05 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
jquery实现两边飘浮可关闭的对联广告
2015/11/27 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
JavaScript Split()方法
2015/12/18 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
node实现简单的反向代理服务器
2017/07/26 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
Vue 中mixin 的用法详解
2018/04/23 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python 算法 排序实现快速排序
2012/06/05 Python
python基础教程之常用运算符
2014/08/29 Python
Python脚本实现集群检测和管理功能
2015/03/06 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
python爬虫租房信息在地图上显示的方法
2019/05/13 Python
python字符串Intern机制详解
2019/07/01 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
Python阶乘求和的代码详解
2020/02/14 Python
Django跨域资源共享问题(推荐)
2020/03/09 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
残疾人小组计划书
2014/04/27 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
亲属关系公证书样本
2015/01/23 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
教师旷工检讨书
2015/08/15 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python