About
Pomelo
是基于Node.js
的高性能、分布式游戏服务器框架。它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复劳动和底层逻辑的开发。Pomelo
不但适用于游戏服务器开发, 也可用于开发高实时 Web应用,它的分布式架构可以使Pomelo
比普通的实时 Web 框架扩展性更好。
Pomelo 特性
- 快速、易上手的游戏开发模型和api
- 高可伸缩的多进程架构, 支持MMO的场景分区和其它各类分区策略
- 方便的服务器扩展机制,可快速扩展服务器类型和数量
- 方便的请求、响应、广播、服务器通讯机制, 无需任何配置
- 注重性能,在性能、可伸缩性上做了大量的测试、优化
- 提供了较多扩展组件,包括游戏开发常用的库和工具包
- 提供了完整的MMO demo代码(客户端html5),可以作为很好的开发参考
- 基于socket.io开发,支持socket.io支持的多种语言客户端
GetStarted
新建项目
使用pomelo的命令行工具可以快速创建一个项目,命令如下:
或者你也可以使用下面的三个命令:
然后,进入到HelloWorld文件夹,安装依赖包:
项目目录结构
|
|
game-server
game-server是用pomelo框架搭建的游戏服务器,以文件app.js作为入口,运行游戏的所有逻辑和功能。所有游戏逻辑、功能、配置等都在该目录下进行。
- app子目录
这个目录下放置所有的游戏服务器代码的地方,用户在这里实现不同类型的服务器,添加对应的Handler,Remote等等。
- config子目录
config包括了游戏服务器的所有配置信息。配置信息以JSON文件的格式进行定义,包含有日志、master、server等服务器的配置信息。
该目录还可以进行扩展,对数据库配置信息、地图信息和数值表等信息进行定义。 - logs子目录
日志是项目中不可或缺的,可以对项目的运行情况进行很好的备份,也是系统运维的参考数据之一,logs存放了游戏服务器所有的日志信息。
shared
shared存放一些前后端、game-server与web-server共用代码,由于都是javascript代码,那么对于一些工具或者算法代码,就可以前后端共用,极大地提高了代码重用性。
web-server
web-server是用express 3.x框架搭建的web服务器,以文件app.js作为入口
可以选择Nginx等其他web服务器
如果游戏的客户端不是web的话,如Android平台的话,这个目录就不是必须的了。
启动项目
如果客户端是web,必须启动game-server(游戏服务器)和web-server(web服务器)
启动game-server服务器
启动web-server服务器
pomelo架构分析
pomelo框架在最初设计的时候只为了一个目标:为基于长连接的分布式游戏服务器架构提供基础设施。框架的内容在逐渐扩展,但最核心的框架只为了干以下三件事:
服务器(进程)的抽象与扩展
在web应用中, 每个服务器是无状态、对等的, 开发者无需通过框架或容器来管理服务器。 但游戏应用不同, 游戏可能需要包含多种不同类型的服务器,每类服务器在数量上也可能有不同的需求。这就需要框架对服务器进行抽象和解耦,支持服务器类型和数量上的扩展。
客户端的请求、响应、广播
客户端的请求、响应与web应用是类似的, 但框架是基于长连接的, 实现模式与http请求有一定差别。 广播是游戏服务器最频繁的操作, 需要方便的API, 并且在性能上达到极致。
服务器间的通讯、调用
尽管框架尽量避免跨进程调用,但进程间的通讯是不可避免的, 因此需要一个方便好用的RPC框架来支撑。
相关链接
通过以下参考资料将使我们很快地熟悉 pomelo 的全貌与开发过程: