pomelo 框架第五部分
项目地址: https://github.com/NetEase/chatofpomelo-websocket.git
分支:tutorial-protobuf
如果发现有错误的地方,请在评论中及时指出,谢谢
一、server的服务
1. server的start
server/server.js:
pro.start = function () {
this.globalFilterService = initFilter(true, this.app);
this.filterService = initFilter(false, this.app);
this.handlerService = initHandler(this.app, this.opts);
this.cronHandlers = loadCronHandlers(this.app);
loadCrons(this, this.app);
this.state = ST_STARTED;
};
在启动server的时候,进行初始化过滤器和Handler接口。
var initHandler = function (app, opts) {
return new HandlerService(app, opts);
};
在对this.handlerService属性进行初始化赋值的时候,实则对HandlerService进行了初始化。
2. connector触发message监听
我们继续看第四部分中的connector服务,当有路由请求时,socket的message字段被触发,调用handleMessage(self, session, dmsg);
接口。
var handleMessage = function (self, session, msg) {
var type = checkServerType(msg.route);
self.server.globalHandle(msg, session.toFrontendSession(), function (err, resp, opts) {
opts = {
type: 'response',
userOptions: opts || {}
};
opts.isResponse = true;
self.send(msg.id, msg.route, resp, [session.id], opts,
function () {
});
});
};
我们知道在调用connector中的start方法时,对this.server = this.app.components.__server__;
进行了赋值,绑定了server组件。所以handleMessage方法中的 self.server.globalHandle
为server组件的方法。
pro.globalHandle = function (msg, session, cb) {
var routeRecord = parseRoute(msg.route);
if (routeRecord.method === 'constructor') {
this.app.sessionService.kickBySessionId(session.id, 'attack');
return;
}
var self = this;
var dispatch = function (err, resp, opts) {
if (self.app.getServerType() !== routeRecord.serverType) {
doForward(self.app, msg, session, routeRecord, function (err, resp, opts) {
response(true, self, err, msg,