正文
socket.io,命名空间
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
原文:http://www.cnblogs.com/xiezhengcai/p/3966263.html
命名空间
在api部分我们说io.connect('ws://103.31.201.154:5555/some')的方式连接到命名空间为some下的socket,在socket.io的前端代码中,我们看见,socket.io会将/some下的连接存入到一个nsps[nsp]下,需要重新建立一个新的socket连接时,除非你配置opts['force new connection']选项,否则socket.io会先寻nsps[nsp]是否已经存在该连接,如果存在,直接返回,不存在才会新建一个,
Manager.prototype.socket = function(nsp){
//这里的nsp即是我们的“/some”
var socket = this.nsps[nsp];
if (!socket) {
socket = new Socket(this, nsp);
this.nsps[nsp] = socket;
var self = this;
socket.on('connect', function(){
//重连次数
self.connected++;
});
}
return socket;
};
服务端实现
服务端会有 Namespace对象存储命名空间下的socket,
function Namespace(server, name){
//命名空间名字“/some”
this.name = name;
//sever 实例
this.server = server;
//命名空间下的socket
this.sockets = [];
this.connected = {};
//命名空间中间件,会在socket建立的时候执行,传入socket实例
this.fns = [];
this.ids = 0;
this.acks = {};
this.initAdapter();
}
查找room,当需要发送信息的时候
//查找room,当需要发送信息时
Namespace.prototype.to =
Namespace.prototype['in'] = function(name){
this.rooms = this.rooms || [];
//不存在则将该命名空间名字push进去
if (!~this.rooms.indexOf(name)) this.rooms.push(name);
return this;
};