2016-04-25 45 views
1

我無法發出事件到房間在我的服務器應用程序,使用版本1.4.5Socket.io 1.4.5房間發出

我嘗試這兩種方式在一個房間裏進行溝通,但沒有奏效。

this.io.to(this.id).emit(eventName,data); 
this.io.sockets.in(this.id).emit(eventName,data); 

之前調用此,我註冊用戶在房間以這種方式

user.socket.join(this.id); 

進一步細節

  • this.io目的是require('socket.io')(http);

  • user.socket對象是io.on('connection', function(socket)

我省略了代碼的其餘部分,因爲它是在過度複雜的結構和繼承鏈,並且還irellevant到這個問題。

我不一定需要一段代碼來複制,而是一種如何調試和解決問題的方法。

編輯

當我停下此刻的應用程序時,我想發出訊息,當我檢查io對象,我得到以下。

io -> nsps -> '/' -> adapter -> rooms -> theRoomName -> sockets 

我的插座ID 列出。

有沒有辦法找出消息是否真的被髮送?

編輯#2

當我檢查插座對象,位於

io -> sockets -> sockets -> "socket id" -> rooms 

房間ID 目前有作爲

+1

要確認的前四件事是:1)this.io的價值是什麼,它應該是什麼。 2)'this.id'的價值是什麼,它應該是什麼。 3)什麼是'eventName'? 4)客戶端是否真的在偵聽'eventName'消息? – jfriend00

+1

您可以追蹤服務器上調試器中的'.emit()'函數調用,看看它是否認爲它應該實際發送消息並查看它的功能。您可以在服務器上使用網絡跟蹤(如WireShark或Ethereral)以查看它是否實際發送任何內容。您可以使用Chrome調試器中的「網絡」選項卡查看消息是否到達客戶端。 – jfriend00

+0

非常感謝您關注此事。所有這些變量都被正確設置了,我在發佈之前確定了。這是它的第四個步驟。在客戶重構期間,我忘記爲該事件附加一個監聽器。再次感謝大家,如果你能夠創建一個答案,我會很樂意接受它 – Slytherin

回答

0

使我的評論到每一個答案您的要求:

要確認的前四件事是:

  1. this.io的值是多少?它應該是什麼?
  2. this.id的值是多少?它應該是什麼?
  3. 什麼是eventName
  4. 客戶端是否真的在收聽eventName消息?

此外,您可以使用服務器調試器跟蹤到.emit()並查看它實際上是否打算髮送消息。

然後,您可以使用WireShark或Ethereal等服務器上的網絡跟蹤來驗證服務器是否實際發送消息。

然後,您可以使用Chrome調試器中的網絡選項卡查看消息是否實際到達瀏覽器頁面。


後記:聽起來項目4以上是問題實際上是。