Created
April 17, 2015 03:02
-
-
Save stableShip/646cd8502abb6d1fc3c8 to your computer and use it in GitHub Desktop.
服务器启动流程
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
服务器的启动流程采用了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