2011-10-18 135 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