我正在使用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);
});
});
谢谢!