源码: https://github.com/NetEase/pomelo
定位
| 维度 |
说明 |
| 名称 |
Pomelo — fast, scalable game server framework for Node.js |
| 作者 |
网易(NetEase) |
| 版本 |
2.2.7(2019) |
| 协议 |
MIT |
| 核心思想 |
多进程 + 单线程 分布式架构,约定优于配置 |
架构

核心技术栈
| 类别 |
技术/依赖 |
用途 |
| 运行时 |
Node.js |
单线程事件驱动 |
| 网络协议 |
pomelo-protocol |
自定义二进制协议 |
| 序列化 |
pomelo-protobuf |
Protobuf 编解码 |
| 压缩 |
Dictionary 组件 |
路由/消息字典压缩 |
| RPC |
pomelo-rpc(MQTT 协议) |
跨进程服务调用 |
| 连接层 |
HybridConnector / SIO / UDP / MQTT |
多协议接入 |
| WebSocket |
ws |
原生 WebSocket |
| Socket.IO |
socket.io 1.7.2 |
浏览器长连接 |
| 日志 |
pomelo-logger(log4js) |
分级日志 |
| 调度 |
pomelo-scheduler |
Cron 定时任务 |
| 管理 |
pomelo-admin |
运维控制台 |
| 模块加载 |
pomelo-loader |
Handler/Remote 自动加载 |
| 异步 |
async |
串行/并行流程控制 |
| 队列 |
seq-queue |
串行化请求(serial filter) |
| CLI |
commander + cliff |
命令行工具 |
创建并运行项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| npm install pomelo -g
pomelo init mygame
cd mygame && sh npm-install.sh
cd game-server pomelo start
cd ../web-server node app.js
|
## 常用 CLI 命令
| 命令 |
作用 |
pomelo init [path] |
创建新项目 |
pomelo start |
启动全部/指定服务器 |
pomelo start -e production |
指定环境 |
pomelo start -D |
后台守护进程 |
pomelo start -t connector -i connector-server-1 |
启动指定类型/ID |
pomelo list |
查看在线服务器 |
pomelo add |
动态添加服务器 |
pomelo stop |
停止服务器 |
pomelo restart |
重启服务器 |
pomelo kill |
强制杀进程 |
## 关键配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13
| game-server/ ├── app.js # 入口:createApp() + configure() + start() ├── config/ │ ├── master.json # Master 地址(默认 3005) │ ├── servers.json # 各类型服务器列表 │ ├── log4js.json # 日志配置 │ ├── serverProtos.json # 服务端 Protobuf 定义 │ ├── clientProtos.json # 客户端 Protobuf 定义 │ └── dictionary.json # 路由压缩字典 └── app/servers/ └── connector/ └── handler/ └── entryHandler.js # 路由处理:connector.entryHandler.entry
|
源码分析大纲
第一层:入口与CLI
| 序号 |
文件 |
分析要点 |
| 1.1 |
lib/index.js |
导出入口 |
| 1.2 |
lib/pomelo.js |
createApp()、组件/Filter/Connector 懒加载 |
| 1.3 |
bin/pomelo |
CLI:init/start/stop/list/add/restart/kill/masterha |
| 1.4 |
lib/modules/console.js |
项目初始化脚手架逻辑 |
第二层:Application核心
| 序号 |
文件 |
分析要点 |
| 2.1 |
lib/application.js |
应用单例、状态机、configure/load/filter/start/stop |
| 2.2 |
lib/util/appUtil.js |
配置加载、默认组件装配、生命周期 |
| 2.3 |
lib/util/constants.js |
路径、关键字、生命周期常量 |
| 2.4 |
lib/util/pathUtil.js |
Handler/Remote/Cron 路径解析 |
| 2.5 |
lib/util/moduleUtil.js |
Admin 模块注册与加载 |
| 2.6 |
lib/util/events.js |
框架事件定义 |
第三层:Master与进程管理
| 序号 |
文件 |
分析要点 |
| 3.1 |
lib/master/master.js |
Master 启动、服务器注册、断线重连、自动重启 |
| 3.2 |
lib/master/starter.js |
fork/spawn 子进程、CPU 绑定 |
| 3.3 |
lib/master/watchdog.js |
进程守护 |
| 3.4 |
lib/components/master.js |
Master 组件封装 |
| 3.5 |
lib/monitor/monitor.js |
监控上报 |
| 3.6 |
lib/components/monitor.js |
Monitor 组件 |
第四层:网络连接层(Connector)
| 序号 |
文件 |
分析要点 |
| 4.1 |
lib/components/connector.js |
连接组件:握手、Session 绑定、加解密 |
| 4.2 |
lib/connectors/hybridconnector.js |
TCP + WebSocket 混合连接器(默认) |
| 4.3 |
lib/connectors/hybrid/switcher.js |
协议切换 |
| 4.4 |
lib/connectors/hybrid/tcpprocessor.js |
TCP 处理 |
| 4.5 |
lib/connectors/hybrid/wsprocessor.js |
WebSocket 处理 |
| 4.6 |
lib/connectors/sioconnector.js |
Socket.IO 连接器 |
| 4.7 |
lib/connectors/udpconnector.js |
UDP 连接器 |
| 4.8 |
lib/connectors/mqttconnector.js |
MQTT 连接器 |
| 4.9 |
lib/connectors/commands/handshake.js |
握手协议 |
| 4.10 |
lib/connectors/commands/heartbeat.js |
心跳保活 |
| 4.11 |
lib/connectors/commands/kick.js |
踢人逻辑 |
| 4.12 |
lib/connectors/common/coder.js |
编解码 |
第五层:请求处理链路
| 序号 |
文件 |
分析要点 |
| 5.1 |
lib/components/server.js |
Server 组件入口 |
| 5.2 |
lib/server/server.js |
消息路由、Filter 链、Handler 分发、Cron |
| 5.3 |
lib/common/service/handlerService.js |
按 serverType.handler.method 路由 |
| 5.4 |
lib/common/service/filterService.js |
before/after 过滤器链 |
| 5.5 |
lib/filters/handler/timeout.js |
请求超时 |
| 5.6 |
lib/filters/handler/serial.js |
同 Session 串行 |
| 5.7 |
lib/filters/handler/toobusy.js |
过载保护 |
| 5.8 |
lib/filters/handler/time.js |
耗时统计 |
第六层:Session与连接管理
| 序号 |
文件 |
分析要点 |
| 6.1 |
lib/components/session.js |
前端 Session |
| 6.2 |
lib/components/backendSession.js |
后端 Session(跨服共享) |
| 6.3 |
lib/components/connection.js |
连接管理 |
| 6.4 |
lib/common/service/sessionService.js |
Session CRUD、绑定 uid |
| 6.5 |
lib/common/service/connectionService.js |
连接池管理 |
| 6.6 |
lib/common/service/backendSessionService.js |
后端 Session 服务 |