2011-10-18 40 views
0

問題我在玩node.js和socket.io。這是我寫的一段代碼:socket.io給node.js/express.js

app.get('/play', function (req, res) { 
//some code you don't need to see 
var gameMessage = io.of('/game'+gameId); 
}); 

所有東西都輸入正確。 gameId被正確設置並且io變量被正確初始化。 當運行這段代碼(試圖訪問本地主機/播放時)我得到這個錯誤:

TypeError: Converting circular structure to JSON 
    at Object.stringify (native) 
    at Array.<anonymous> (/path/to/my/game/node_modules/express/node_modules/connect/lib/middleware/session/memory.js:74:31) 
    at EventEmitter._tickCallback (node.js:126:26) 

如果我註釋掉var gameMessage行代碼,我沒有得到這個錯誤。這就是它的產生。

我想這條線留在那裏,因爲它實例化我需要的頻道。這樣兩個人可以一起玩我的比賽。如果我不實例化並嘗試運行在客戶端的一些代碼,就像

var chat = io.connect('http://localhost/chat' + gameId); 
     chat.emit('guess', { 
      guess: "ciao" 
     }); 
     chat.on('guess', function (data) { 
      alert(data); 
     }); 

我得到錯誤的無限循環中控制檯,第二個玩家連接。

有人能猜出這有什麼問題嗎?謝謝。

回答

1

你在做什麼是錯誤的,你不應該把這個Socket.IO代碼放到你的路由中,Express.js應用和Socket.IO應用不會像那樣「連接」。

使用您的Socket.IO服務器創建一個單獨的文件,然後在想要連接到Socket.IO(從服務器端或客戶端)以發送消息時使用socket.io-client

+0

我想爲每對玩家分別設置一個頻道,但是這兩個頻道將在兩個玩家連接時創建。是否有可能做這樣的事情? – Masiar

+0

您可以做其他事情,讓每個用戶連接到他的頻道。例如,當「亞歷克斯」向「吉姆」發送消息時,「吉姆」會收到該消息,因爲它收聽「吉姆」頻道,反之亦然。 – alessioalex