node.js适合游戏后台开发吗?
网站服务器和游戏服务器是怎么样联系到一起的?
百牛信息技术bainiu.ltd整理发布于博客园
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,因为手游这玩意局限于网络问题,服务器只能做关键数据验证,也没办法处理特别多人交互的情形。服务器端已经简化得跟网页服务器没啥区别了,业务逻辑也简单,处理处理数据,然后持久化就成。
node.js适合游戏后台开发吗?的更多相关文章
- 《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想
总体介绍 <Node.js+MongoDB+AngularJS Web开发>,于2015年6月出版,是一本翻译过来的书,原书名为<Node.js,MongoDB and Angula ...
- Pomelo:网易开源基于 Node.js 的游戏服务端框架
Pomelo:网易开源基于 Node.js 的游戏服务端框架 https://github.com/NetEase/pomelo/wiki/Home-in-Chinese
- Node.js 命令行程序开发资料
Node.js 命令行程序开发教程http://www.ruanyifeng.com/blog/2015/05/command-line-with-node.html用Node.js创建命令行工具ht ...
- [Node.js框架] 为什么要开发 Codekart 框架
两年前,在被php的$符号和字符串处理折磨得半夜骂娘之后,我义无反顾地决定:珍爱生命,远离php. 之后一直在寻找一门“完美的语言”,先后接触了Lisp.python.java.Ruby.Lisp几乎 ...
- node.js + webstorm :配置开发环境
一.配置开发环境: 1.先安装node (1).访问http://nodejs.org打开安装包,正常安装,点击next即可. 为了测试是否安装成功,打开命令提示符,输入node,则进入node.js ...
- 【Node.js】2.开发Node.js选择哪个IDE 开发工具呢
安装完Node.js之后,就要为它选择一个有利的IDE用于开发. 相比较了多个IDE之后,定位在webstrom和sublime上. 有一个简单的比较: webstorm功能很丰富,前端开发工具的集大 ...
- node.js简单数据接口开发
随着网络时代的快速发展,前端开发不仅仅是做出漂亮的页面就可以了,还要会一点后端语言,那么后端语言有Java,php,node.js最常见,那我们应该学哪一种呢,为了让我们自己更好的学习,我推荐选择no ...
- 如何快速搭建一个 Node.JS 项目并进入开发?
了解:如何快速搭建一个项目并进入开发? 在此不概述 Node.JS 的历史以及发展过程. 因为之前接触过通过 Java 开发语言,所以明确地知道一个服务器所需的文件,以及一个服务器所需要的操作. 那么 ...
- Notadd 2.0 全新 Node.js 版本~ (开发中) [从 PHP 到 node 的踩坑记]
对于 Notadd 我们本来期望它实现更多... 尽管我们也尝试做了很多努力,但是由于 PHP 本身的局限,以及考虑到开发环境配置的复杂程度,最终使用了折中方案.接下来,我们谈谈整个技术选型历程,也供 ...
随机推荐
- ftrace 详解
http://www.ibm.com/developerworks/cn/linux/l-cn-ftrace/ http://www.ibm.com/developerworks/cn/linux/l ...
- 生活娱乐 WIFI机器人(某机器发烧友自己动手做一台)
某机器发烧友自己动手做一台WIFI机器人,以下是这位发烧友的自述!让我们一起来分享他的劳动成果-- 在经历了十多天的疯狂淘宝.组装.调试.拆卸.再组装.再调试的过程后,俺的Wifi Robot终于于2 ...
- Ubuntu搭建Android开发环境
前言 由于迁移到新的笔记本,所以Android开发环境须要又一次配置了.android官网有配置教程,我正好回想一遍 配置Java环境 下载jdk.官网地址:http://www.oracle.com ...
- android menu事件
@Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0,1,1,R.string.exit); menu.add(0, ...
- Java数据结构与算法之排序
排序从大体上来讲,做了两件事情: 1.比較两个数据项: 2.交换两个数据项.或复制当中一项 一.冒泡排序 大O表示法:交换次数和比較次数都为O(N*N). 算法原理: 1.比較相邻的元素.假设第一个比 ...
- HDOJ 5091 Beam Cannon 扫描线
线段树+扫描线: 我们用矩形的中心点来描写叙述这个矩形,然后对于每一个敌舰,我们建立一个矩形中心的活动范围,即矩形中心在该范围内活动就能够覆盖到该敌舰.那么我们要求的问题就变成了:随意一个区域(肯定也 ...
- CycleViewPager
https://github.com/zhaozhentao/CycleViewPager
- Django-权限信息初始化
数据库 from django.db import models class Menu(models.Model): """ 菜单组: """ ...
- u-boot简单学习笔记(二)——AR9331 uboot.lds分析
最开始系统上电后 从uboot.lds开始引导 OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", ...
- 使用mysql导入数据时关掉binlog
在my.cnf中注释掉 log-bin=bin-log参数然后重启数据库