pomelo并非完全的游戏引擎
前几天有个朋友问,棋牌游戏js可以做不,由于对于游戏这一块基本算是空白,所以就稍微查了下资料,不想,有新的发现。
大名鼎鼎的pomelo 大家应该不陌生。
没想到他的文档还挺齐全的,它是基于nodejs的,下面介绍下pomelo的安装
pomelo最初的设计初衷是为了游戏服务器, 不过在设计、开发完成后发现pomelo是个通用的分布式实时应用开发框架。下面将结合实际,从游戏服务器的需求,以及开发中面临的问题等方面阐述pomelo的设计动机。
游戏服务器概述
没开发过游戏的人会觉得游戏服务器是很神秘的东西。但事实上它并不比web服务器复杂,无非是给客户端提供网络请求服务,本质上它只是基于长连接的socket服务器。当然在逻辑复杂性、消息量、实时性方面有更高的要求,下面从web服务器与游戏服务器的对比中来说明游戏服务器的一些特点:
复杂的socket服务器
如果说web服务器的本质是http服务器,那么游戏服务器的本质就是socket服务器。 它利用socket通讯来实现服务器与客户端之间的交互。事实上有不少游戏是直接基于原生socket来开发的。 相对于简单的socket服务器,它承受着更加繁重的任务:
后端承载着极复杂的游戏逻辑。
网络流量与消息量巨大,且实时性要求高。
通常一台socket服务器无法支撑复杂的游戏逻辑,因此往往使用一个服务器集群来提供服务。
长连接和实时响应
web应用都是基于request/response的短连接模式,占用的资源要比一直hold长连接的游戏服务器要少很多,因此web应用可以使用基于http的短连接来达到最大的可扩展性,Web应用能使用短连接模式的原因如下:
通讯的单向性,普通web应用一般只有拉模式
响应的实时性要求不高,一般web应用的响应时间在3秒以内都算响应比较及时的。
而游戏应用只能使用长连接,原因如下:
通讯的双向性,游戏应用不仅仅是推拉模式,而且推送的数据量要远远大于拉的数据量
响应的实时性要求极高,一般游戏应用要求推送的消息实时反应,而实时响应的最大时间是100ms。
分区策略与负载均衡
普通的web应用在交互上没有相邻性的概念,所有用户之间的交互都是平等,交互频率也不受地域限制。 而游戏则不然,游戏交互跟玩家所在地图(场景)上的位置关系非常大,如两个玩家在相邻的地方可以互相PK或组队打怪。这种相邻的交互频率非常高,对实时性的要求也非常高,这就必须要求相邻玩家在分布在同一个进程里。于是就有了按场景分区的策略,如图所示:
一个进程里可以有一个场景,也可以有多个场景。这种实现带来了游戏的可伸缩性受到场景进程的限制,如果某个场景过于烦忙可能会把进程撑爆,也就把整个游戏撑爆。场景服务器是有状态的,每个用户请求必须发回原来的场景服务器。服务器的有状态带来一系列的问题:场景进程的可伸缩,高可用性等都比不上web服务器。目前只能通过游戏服务器的隔离来缓解这些问题。
web应用的分区可以根据负载均衡自由决定, 而游戏则是基于场景(area)的分区模式, 这使同场景的玩家跑在一个进程内, 以达到最少的跨进程调用。
可伸缩性与分布式开发
不管是web应用还是游戏服务器,可伸缩性始终是最重要的指标,也是最棘手的问题,它涉及到系统运行架构的搭建,各种优化策略。 只有把可伸缩性设计好了,游戏的规模、同时在线人数、响应时间等参数才能得到保证。最初的网络服务器是单进程的架构,所有的逻辑都在单台服务器内完成, 这对于同时在线要求不高的游戏是可以这么做的。由于同时在线人数的上升, 单服务器的可伸缩性必然受到挑战。随着网络游戏对可伸缩性要求的增加,分布式是必然的趋势的。 下面是一个web服务器和游戏服务器架构对比的示意图:
可以看到由于web服务器的无状态性,只需要通过前端的负载均衡器可以导向任意一个进程,因此运行架构相对简单, 而且很少需要分布式开发。
而游戏服务器是蜘蛛网式的架构,每个进程都有各自的职责,这些进程的交织在一起共同完成一件任务。因此游戏服务器是一个标准的分布式开发架构。
pomelo是一个轻量级的服务器框架,它最适合的应用领域是网页游戏、社交游戏、移动游戏的服务端,开发者会发现pomelo可以用如此少的代码达到强大的扩展性和伸缩性。当然还不仅仅是游戏,用pomelo开发高实时web应用也如此合适, 而且伸缩性比其它框架好。
不推荐将pomelo用于大型的MMORPG游戏开发,尤其是大型3D游戏, 还是需要象Bigworld这样的商用引擎来支撑。
####安装条件
1、确保机器能够上网。
2、需要安装node,python2.5以上,以及c++的编译器。- python(2.5<version<3.0)。
- VC++ 编译器,包含在Visual Studio 2010中(VC++ 2010 Express亦可)。对于windows8的用户,需要安装Microsoft Visual Studio C++ 2012。
####开始安装
npm install pomelo -g
windows下安装一定用注意python的环境变量配置
- node,vs2010 和 python(2.5<v<3) 都是32位或者都是64位的。
- 配置 PYTHON=d:\Python27\python.exe(设置成你自己的路径)。注意不是path里面,而是和path同级的,直接在全局或者当前用户下配置。
- 保证环境变量path里面有 %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;
注: 这三个环境变量中貌似只有%SystemRoot%\system32这个环境变量有用,没具体试(没有他会报CreateProcessW找不到的错误)。 - 如果在命令行界面安装pomelo失败,可以在Visual Studio的命令行界面安装。