gpt4 book ai didi

node.js - Express,为每个用户保留变量

转载 作者:太空宇宙 更新时间:2023-11-03 23:34:47 25 4
gpt4 key购买 nike

我在 Express/Node 之上使用 socket.io

现在我正在使用这个方法:

// get room name from URL
var requestRoom;
app.get('/editor/:room', function(req, res) {
requestRoom = req.params.room;
res.render('editor/editor', {
title: 'Editor'
});
});

// use that room name for private rooms within socket.io
io.on('connection', function(socket) {
socket.join(requestRoom);
// rest of socket.io code....

从类似于 sitename.io/editor/[room-name] 的 URL 中获取room-name

然后我使用 requestRoom 作为 socket.to(requestRoom).broadcast.. 的变量,用于将套接字数据包发送到特定房间。

<小时/>

问题

每次新用户访问应用时,requestRoom 都会为所有用户重新填充,而不仅仅是为刚刚加入的用户。

有没有办法为每个“ session ”启动一个具有自己变量的新“实例”?我在这里缺少什么?

最佳答案

您无法为每个 session 创建新实例。

但是,您可以通过从客户端发送房间名称来解决此问题。当您使用socket.io-client连接到WebSocket时,将房间名称添加到查询参数中。

客户:

var requestRoom = "roomName";
io('/', {query: "requestRoom=" + requestRoom})

服务器:

io.on('connection', function(socket) {
var requestRoom = socket.request._query.requestRoom;
socket.join(requestRoom);
// rest of socket.io code....

编辑:

Nicholas Kyriakides 使用更简单的方法来解决这个问题。

服务器:

io.on('connection', function(socket) {
var refererSplit = socket.request.headers.referer.split('/');
var requestRoom = refAr[refererSplit.length-1]; //Considering Room name is at the end of the path.
socket.join(requestRoom);
// rest of socket.io code....

无需从客户端传递 roomName。

关于node.js - Express,为每个用户保留变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33973284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com