Javascript 发送到特定套接字时,socket.io中的命名空间

Javascript 发送到特定套接字时,socket.io中的命名空间,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,当我给我的应用命名时,我遇到了一个问题,我想将数据发送到一个特定的套接字,下面是我正在使用的代码的缩写版本: var io = require('socket.io').listen(config.web.port); var chat = io.of('space').on('connection', function (socket) { // This works: // Input: xhr-polling received data packet 5::/space:{"n

当我给我的应用命名时,我遇到了一个问题,我想将数据发送到一个特定的套接字,下面是我正在使用的代码的缩写版本:

var io = require('socket.io').listen(config.web.port);

var chat = io.of('space').on('connection', function (socket) {

  // This works:
  // Input: xhr-polling received data packet 5::/space:{"name":"test"}
  // Output: xhr-polling writing 5::/space:{"name":"test","args":[{"msg":"test"}]}
  socket.on('test', function(){
    socket.emit('test',{msg: "test"});
  });

  // This fails:
  // Input: xhr-polling received data packet 5::/space:{"name":"test2"}
  // Output: xhr-polling writing 5:::{"name":"test2","args":[{"msg":"test2"}]}      
  socket.on('test2',function(){
    io.sockets.socket(socket.id).emit('test2',{msg: "test2"});
  });
}
如您所见,第二个缺少输出中的名称空间部分。在真正的应用程序中,我从客户机管理器中选择套接字id,因此我在这段代码中使用socket.id,而不是client.getSocketId,但这个想法与我在这里回显原始客户机的想法相同

如何使第二个方法在输出到客户端时使用正确的命名空间?

签出后,语法似乎是io.of'space'.socketid.emit

[根据Fuu的评论编辑]

为了找到这个,我检查了Socket.IO并查找了一个与namespace相关的文件,namespace.js似乎符合要求。该文件不是很长,所以我扫描了它,在SocketNamespace的原型上寻找一些方法,这些方法看起来可以满足我们的需要


由于您调用io.sockets.socket来查找全局命名空间上的套接字,SocketNamespace.prototype.socket在我看来是有前途的。此外,它接受一个名为sid的参数,方法的主体似乎是通过这个ID从套接字的散列中获取套接字。套接字就是我们想要的,它持有emit方法,所以我的假设是,这就是本例中要使用的方法。

谢谢,这解决了问题!您是否可以对您的答案进行编辑,以包含您从SocketNamespace的源代码中得出的答案?通读一遍,我想不出来。我想了解详情嗯,我得到了SocketNamespace.prototype.socket部分的函数,但是您如何从中推断需要为“io.sockets.socket”中的套接字替换“namespace”?因为您使用“space”的io.of在第二行代码中返回名称空间对象,所以您可以在这里再次使用它。