socket.io,命名空间

     原文:http://www.cnblogs.com/xiezhengcai/p/3966263.html 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]是否已经存在该链接,若是存在,直接返回,不存在才会新建一个,api

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;
};

服务端实现socket

服务端会有 Namespace对象存储命名空间下的socket,this

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,当须要发送信息的时候socket.io

//查找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;
};
相关文章
相关标签/搜索