Skip to content

Instantly share code, notes, and snippets.

@stableShip
Created April 17, 2015 03:02
Show Gist options
  • Save stableShip/646cd8502abb6d1fc3c8 to your computer and use it in GitHub Desktop.
Save stableShip/646cd8502abb6d1fc3c8 to your computer and use it in GitHub Desktop.
服务器启动流程
服务器的启动流程采用了Pomelo中的启动模式. 在阅读下面内容前, 请先阅读[pomelo启动流程](https://github.com/NetEase/pomelo/wiki/pomelo%E5%90%AF%E5%8A%A8%E6%B5%81%E7%A8%8B).
app.js是服务器的入口, 主要负责所有服务器的配置, 以及组件的加载和启动. 服务器的启动主要分为两步:启动master服务器, 再由master服务器分别启动其他服务器.
服务器启动时还会加载hall的配置文件, 用来建立游戏大厅和服务器之间的映射:
``` javascript
// 载入大厅的配置
app.loadConfig('hallConfig', app.getBase() + '/config/hallConfig.json');
```
为了能在多个hall服务器中正确的路由, 服务器中加载了自定义的路由组件, 通过使用配置文件hallConfig配置hall关系, 可以确保玩家的请求被分发到对应的hall服务器上:
``` javascript
// 配置到hall的路由
app.route('hall', hallRoute);
```
除了服务器的通用配置以外, app.js中还负责不同服务的初始化工作: 如connect服务器的初始化, auth的初始化, 以及hall服务器的初始化, 这些初始化会根据服务器的类型进行不同的初始化过程:
``` javascript
/**
* connector server configuration
*/
app.configure('production|development', 'connector', function() {
app.set('connectorConfig', {
connector: pomelo.connectors.hybridconnector,
disconnectOnTimeout: true,
heartbeat: 60,
transports: {
'close timeout': 120,
'heartbeat interval': 60,
'heartbeat timeout': 120
}
});
// 从配置中读取http服务器端口配置信息
var port = app.get("servers").connector[0].httpServerPort;
// 启动http服务器(用于和微信登陆授权服务器通信)
httpServer.start(app, port);
});
```
MySql的初始化:
``` javascript
// Configure database
app.configure('production|development', 'auth|hall|connector', function() {
var dbclient = require('./app/dao/mysql/mysql').init(app);
app.set('dbclient', dbclient);
// 每10分钟写一次数据库
app.use(sync, {
sync: {
path: __dirname + '/app/dao/mapping',
dbclient: dbclient,
interval: 60 * 1000
}
});
});
```
### 服务器的启动
服务器的启动也采用了Pomelo框架中的启动方式, 即将master作为一个默认组件, 在app.js调用app.start()方法后加载, 启动master服务.
master组件会负责启动其他所有服务. 这个启动过程分为两个阶段:第一阶段, master服务启动其他所有服务器, 在服务器启动完毕后, 其中的monitor组件会连到master对应的监听端口上, 表明该服务器启动完毕. 第二阶段, 在所有服务器都启动完毕之后, mater会调用所有服务器上的afterStart接口, 来进行启动后的处理工作.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment