componets:
connector 处理连接默认使用socketio
server 处理connector转发过来的msg,调用对应的handle
session 保存客户端的连接信息,生成用于后端使用的BackenSession
connection 保存连接的统计信息
connector是核心,在start的时候会获取其他三个组件,作为自己的一个变量使用,在afterstart时候,会对connectorserveice绑定connection消息
connection的消息流程:
httpserver接受upgrade消息,发送connection消息到websocket,然后转发给在hybrid的wsprocessor中,
switcher在初始化的时候就调用了
this.wsprocessor.on('connection', this.emit.bind(this, 'connection'));
this.tcpprocessor.on('connection', this.emit.bind(this, 'connection'));
this.tcpprocessor.on('connection', this.emit.bind(this, 'connection'));
把wsprocessor的消息转发给了switcher,而switcher把消息在connector中进行处理了。
两个注意:
1:clientsocket在switcher中转发的时候,被包装成HybridSocket了,注意区别
2:之所以存在switcher,是为了处理tcp和ws连接,不同的连接最终都变味HybridSocket
connetor对connection消息的处理:
会调用connection组件,保存增加连接信息
调用session组件,产生session
对HybridSocket添加消息绑定,在接受message消息的时候,调用handleMessage,将session转化为后端session,转给server组件的globalHandle进行处理,处理的结果在回调函数中,作为resp,调用send函数,反馈给客户端
server组件对message的处理:
首先从msg中分析路由信息,调用parseRoute(msg.route);
然后调用过滤器,beforeFilter(true, self, msg, session, dispatch);
如果过滤通过,调用分发函数dispatch
在分发中,如果路由指向的服务器类型是当前服务器,调用doHandle,进行本服务器的handle调用,如果是其他服务器,调用doForward,通知其他服务器的handle调用,最终在回调中,把结果发个客户端。