【问题标题】:socket.io giving issue with node.js / express.jssocket.io 给出 node.js / express.js 的问题
【发布时间】:2011-10-18 09:31:58
【问题描述】:

我正在使用 node.js 和 socket.io。这是我正在写的一段代码:

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

一切都正确导入。 gameId 已正确设置,io 变量已正确初始化。 运行此代码时(尝试访问 localhost/play 时)我收到此错误:

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);
        });

当第二个玩家连接时,我在控制台中得到一个无限循环的错误。

有人能猜出这有什么问题吗?谢谢。

【问题讨论】:

    标签: node.js socket.io express


    【解决方案1】:

    你做错了,你不应该把那个 Socket.IO 代码放到你的路由中,Express.js 应用程序和 Socket.IO 应用程序不会像那样“连接”。

    使用您的 Socket.IO 服务器创建一个单独的文件,然后在您想要连接到 Socket.IO(从服务器端或客户端)发送消息时使用 socket.io-client

    【讨论】:

    • 我想为每对播放器创建一个单独的频道,但这些频道将在两个播放器连接时创建。有可能做这样的事情吗?
    • 你可以做点别的,让每个用户都连接到他的频道。例如,当“Alex”向“Jim”发送消息时,“Jim”会收到消息,因为它会监听“Jim”频道,反之亦然。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2023-03-09
    相关资源
    最近更新 更多