原文: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; };