2015-12-15 239 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