pomelo 框架第四部分
项目地址: https://github.com/NetEase/chatofpomelo-websocket.git
分支:tutorial-protobuf
如果发现有错误的地方,请在评论中及时指出,谢谢
一、connector的服务
1. 初始化new及启动start
connector.js:
var Component = function (app, opts) {
opts = opts || {};
this.app = app;
this.connector = getConnector(app, opts);
};
var getConnector = function (app, opts) {
var connector = opts.connector;
var curServer = app.getCurServer();
return connector(curServer.clientPort, curServer.host, opts);
};
app.configure('production|development', 'connector', function(){
app.set('connectorConfig',
{
connector : pomelo.connectors.hybridconnector,
heartbeat : 3,
useDict: true,
useProtobuf: true
});
});
对于初始化connector服务来说,由于我们之前在app.js
中对connectorConfig进行了配置,所以此时初始化connector用到的是pomelo.connectors.hybridconnector
服务(请参照第一部分内容),实则初始化hybridconnector服务。
pro.start = function (cb) {
this.server = this.app.components.__server__;
this.session = this.app.components.__session__;
this.connection = this.app.components.__connection__;
};
appUtil.optComponents
中调用connector.start
方法,把server组件、session和connection组件绑定到connector属性上,为后续操作提供服务。
2. connector.afterStart
pro.afterStart = function (cb) {
this.connector.start(cb);
this.connector.on('connection', hostFilter.bind(this, bindEvents));
};
由于connector为hybirdconnector,所以start为hybirdconnector.start
方法,在监听connection,触发hostFilter.bind(this, bindEvents)
3. hybirdconnector.start
Connector.prototype.start = function (cb) {
var app = require('../pomelo').app;
var self = this;
var gensocket = function (socket) {
var hybridsocket = new HybridSocket(curId++, socket);
hybridsocket.on('handshake', self.handshake.handle.bind(self.handshake, hybridsocket));
hybridsocket.on('heartbeat', self.heartbeat.handle.bind(sel