2015-12-15 240 views
1

因此,我所问的几乎是什么,如何加入名为“inside”不同命名空间的命名空间房间?加入不同命名空间的命名空间房间

var mainNamespace = io.of('/main'); 
var chatNamespace = io.of('/chat'); 

mainNamespace.on("connection", function (socket) { 

    socket.on("somethingHappens", function() { 
     // i thought i could do this 
     chatNamespace.join("coolRoom", function(){ 
      console.log("yey i joined the room!"); 
     }) 
    }); 
} 

我能以某种方式获得吗? 谢谢。

回答

0

你不能轻易做到这一点。与房间不同,命名空间不是动态的并且根据连接来确定。例如,你可以调用io.connect('/ main');在前端。

一旦建立连接,套接字就属于它所连接的名称空间。

dynamic namespaces的想法已经存在了一段时间,并且有一些实现和模块。

0

Xplouder因为我不再使用该库,所以添加的内容比我在github上的原始评论(从2012)还要多。

裁判:https://github.com/socketio/socket.io/issues/285#issuecomment-8962287

召回该变量socket一个名为namespace财产命名空间的插座是目前一个参考,我不能更改说话。该API自2012年以来。

以下命令应该给你更多关于内部发生了什么的想法:

console.log(socket.namespace === mainNamespace); 
console.log(socket.namespace.name); 
console.log(socket.rooms); 

我建议尝试手动更改socket.namespace,如:

socket.namespace = chatNamespace;

如果你不这样做,那么我认为插座将加入/main/coolRoom而不是/chat/coolRoom如你预期。

留给后人,如果其他人是否有问题,我会建议记录的console.log上述声明,并观察当前命名空间的名称如何影响.join()方法。

+0

不幸的是,它不再工作,不得不合并两个我必须解决这个问题的命名空间......无论如何谢谢。 :) – Xplouder