从同一用户分离几个socket.io连接

时间:2014-06-18 17:39:36

标签: javascript node.js express socket.io

我正在使用Node.js,Express和socket.io开发简单的Web应用程序,以便一个用户可以输入内容而其他用户可以查看它,我真的无法理解使用套接字.IO。

流程是登录后,用户将看到他的所有对话。他将能够点击“编辑”或“查看”对话。它将显示对话,他将键入的所有内容将使用socket.io传输到服务器,然后传输给任何点击“查看”的人。

每个会话都有自己的ID,用户可以通过转到“/:id / view”查看该会话,然后转到“/:id / edit”进行编辑。问题是当用户打开几个对话进行编辑时,我不知道如何将它们分开。我有这段代码:

app.get("/:id/edit", function(req, res) {
    res.render('editing');
});

问题是当socket.io连接(在io.on("connection")中)时,我无法弄清楚如何判断它属于哪个会话ID。我以为我会使用会话来保存已打开会话的ID,但问题是当用户同时打开两个会话时 - 将无法将这些会话分开。我想出的另一个解决方案是将res.render中的会话ID呈现为javascript - 类似于:

<html>
...
<body>
...
<script>
  var socket = io();
  socket.emit("conversation_id", "{% ID %}");
  ...
</script>
</body>
</html>

但我认为渲染客户端javascript并不好并且会出现巨大的安全问题 - 一旦我将查看文档仅限于它所属的人,用户将能够更改文档ID(因为它是客户端) - 并且连接到其他文件。

有没有简单,规范的方法来正确地做到这一点?简而言之,我想做一些替代:

app.get("/:id/edit", function(req, res) {
    res.render('editing');
    var socket = socket_from_socketio_that_connects_because_of_this;
    socket.on("type", function (data) {
        objects[req.params.id].text.push(data);
    });
});

谢谢!

0 个答案:

没有答案