搞死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;

};

 

你可能感兴趣的:(socket)