所以,我问的差不多就是,我如何才能加入一个“在”不同名称空间内的名称空间?
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!");
})
});
}我能以某种方式获得这个吗?谢谢。
发布于 2015-12-15 12:16:51
你不能轻易做到这一点。与房间不同,名称空间不是动态的,并且在连接时确定。例如,您可以在前端调用io.connect('/main');。
一旦建立连接,套接字就属于它所连接到的命名空间。
dynamic namespaces的想法已经存在了一段时间了,并且有一些实现和模块。
发布于 2015-12-15 20:12:00
参考:https://github.com/socketio/socket.io/issues/285#issuecomment-8962287
我还记得,变量socket有一个名为namespace的属性,该属性引用了套接字当前为的所在的名称空间。自2012年以来,我不能对API的变化发表意见。
下面的命令应该会让您对内部发生的事情有更多的了解:
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()方法。
https://stackoverflow.com/questions/34279278
复制相似问题