从连接套接字中查找命名空间或URL信息?

时间:2014-09-14 15:59:59

标签: javascript node.js socket.io

有什么方法可以在连接到服务器时找到套接字的命名空间或客户端URL吗?

客户端:

var socket = io.connect('/ns1');

服务器:

io.sockets.on('connection', function(socket){
    //socket.something.namespace?
});

我已经广泛地查看了套接字的对象结构,但是对命名空间的任何引用都只有" name" :" /"或列出所有服务器的命名空间,而不是单个套接字的命名空间。

同样的URL也是如此。我只能在he​​ader referrer中找到它,但这可能不如真正的URL引用那么健壮。

1 个答案:

答案 0 :(得分:2)

socket.io guide使用这种方式监听命名空间上的连接:

var nsp = io.of('/my-namespace');
nsp.on('connection', function(socket){
  console.log('someone connected'):
}); 

它还将“io.sockets”称为默认命名空间。因此,当“io.sockets.on('connection'”方法被触发时,您将进入默认命名空间。Related

编辑: 从动态创建的命名空间接收连接也非常简单。我认为这解决了你的初步问题。

另一个编辑:命名空间当然也可以在套接字this.nsp.name中访问:

function registerNamespace(name){
  var nsp = io.of(name);
  nsp.on('connection', function(socket){
    console.log("I am in namespace: " + this.name);

    socket.on('hello', function () {
      console.log("Hello in namespace: " + this.nsp.name);      
    });

    socket.on('disconnect', function () {
      console.log("I was in namespace: " + this.nsp.name);      
    });
  }); 
}

registerNamespace("/name2");
registerNamespace("/name1");