About

Pomelo 是基于 Node.js 的高性能、分布式游戏服务器框架。它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复劳动和底层逻辑的开发。Pomelo 不但适用于游戏服务器开发, 也可用于开发高实时 Web应用,它的分布式架构可以使 Pomelo 比普通的实时 Web 框架扩展性更好。

Pomelo 特性

  • 快速、易上手的游戏开发模型和api
  • 高可伸缩的多进程架构, 支持MMO的场景分区和其它各类分区策略
  • 方便的服务器扩展机制,可快速扩展服务器类型和数量
  • 方便的请求、响应、广播、服务器通讯机制, 无需任何配置
  • 注重性能,在性能、可伸缩性上做了大量的测试、优化
  • 提供了较多扩展组件,包括游戏开发常用的库和工具包
  • 提供了完整的MMO demo代码(客户端html5),可以作为很好的开发参考
  • 基于socket.io开发,支持socket.io支持的多种语言客户端

GetStarted

新建项目

使用pomelo的命令行工具可以快速创建一个项目,命令如下:

1
$ pomelo init ./HelloWorld

或者你也可以使用下面的三个命令:

1
2
3
$ mkdir HelloWorld
$ cd HelloWorld
$ pomelo init

然后,进入到HelloWorld文件夹,安装依赖包:

1
$ sh npm-install.sh

项目目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.
├── game-server \\用pomelo框架搭建的游戏服务器,以文件app.js作为入口
│   ├── app
│   ├── app.js
│   ├── config
│   ├── logs
│   ├── node_modules
│   └── package.json
├── npm-install.bat
├── npm-install.sh
├── shared
│   ├── server.crt
│   └── server.key
└── web-server \\用pomelo框架搭建的游戏服务器,以文件app.js作为入口
├── app.js
├── bin
├── node_modules
├── package.json
└── public

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服务器

1
2
$ cd game-server
$ pomelo start

启动web-server服务器

1
2
$ cd web-server
$ node app

pomelo架构分析

pomelo框架在最初设计的时候只为了一个目标:为基于长连接的分布式游戏服务器架构提供基础设施。框架的内容在逐渐扩展,但最核心的框架只为了干以下三件事:

服务器(进程)的抽象与扩展

在web应用中, 每个服务器是无状态、对等的, 开发者无需通过框架或容器来管理服务器。 但游戏应用不同, 游戏可能需要包含多种不同类型的服务器,每类服务器在数量上也可能有不同的需求。这就需要框架对服务器进行抽象和解耦,支持服务器类型和数量上的扩展。

客户端的请求、响应、广播

客户端的请求、响应与web应用是类似的, 但框架是基于长连接的, 实现模式与http请求有一定差别。 广播是游戏服务器最频繁的操作, 需要方便的API, 并且在性能上达到极致。

服务器间的通讯、调用

尽管框架尽量避免跨进程调用,但进程间的通讯是不可避免的, 因此需要一个方便好用的RPC框架来支撑。

相关链接

通过以下参考资料将使我们很快地熟悉 pomelo 的全貌与开发过程:

  • Pomelo架构概览
  • Pomelo快速使用指南
  • Pomelo中文教程
  • Pomelo中文FAQ