在 websocket 中一次只允许一个连接
Allow only one connection at a time in websocket
当有人连接到我的 websocket 时,我希望最后打开的连接处于活动状态并关闭所有其他旧 connections.Every 用户具有唯一性 token.Following 是我创建的代码
wss.on('connection', function connection(ws,req) {
const myURL = new URL("https://example.com"+req.url);
var token = myURL.searchParams.get('token');
ws.send("success");
exists = users.hasOwnProperty(token);
if(exists)
{
//console.log("Token exists already");
// ws.send("fail");
// ws.close();
users[token]["ws"].send("fail");
users[token]["ws"].close();
users[token] = [];
users[token]["ws"] = ws;
}
else
{
users[token] = [];
users[token]["ws"] = ws;
//console.log('connected: ' + token + ' in ' + Object.getOwnPropertyNames(users));
}
ws.on('close', function () {
delete users[token]
//console.log('deleted: ' + token);
})
});
但是上面的代码只在第一次有效,如果我第三次打开第二个和第三个连接是 live.I 想关闭第二个并保留第三个 alive.Any 感谢帮助谢谢。
您可能打算使用对象而不是数组
所以
users[token] = {};
而不是
users[token] = [];
我会在新连接到来时关闭所有其他连接,所以新的连接处理程序是这样的
wss.on('connection', function connection(ws, req) {
const myURL = new URL("https://example.com" + req.url);
var token = myURL.searchParams.get('token');
ws.send("success");
exists = users.hasOwnProperty(token);
for(const token in users){ // close all existing connections
users[token]["ws"].send("fail");
users[token]["ws"].close();
}
if (exists) {
users[token]["ws"] = ws; // update websocket
}
else {
users[token] = {ws: ws}; // add new websocket to users
// same thing as
// users[token] = {}
// users[token]["ws"] = ws
}
}
当有人连接到我的 websocket 时,我希望最后打开的连接处于活动状态并关闭所有其他旧 connections.Every 用户具有唯一性 token.Following 是我创建的代码
wss.on('connection', function connection(ws,req) {
const myURL = new URL("https://example.com"+req.url);
var token = myURL.searchParams.get('token');
ws.send("success");
exists = users.hasOwnProperty(token);
if(exists)
{
//console.log("Token exists already");
// ws.send("fail");
// ws.close();
users[token]["ws"].send("fail");
users[token]["ws"].close();
users[token] = [];
users[token]["ws"] = ws;
}
else
{
users[token] = [];
users[token]["ws"] = ws;
//console.log('connected: ' + token + ' in ' + Object.getOwnPropertyNames(users));
}
ws.on('close', function () {
delete users[token]
//console.log('deleted: ' + token);
})
});
但是上面的代码只在第一次有效,如果我第三次打开第二个和第三个连接是 live.I 想关闭第二个并保留第三个 alive.Any 感谢帮助谢谢。
您可能打算使用对象而不是数组
所以
users[token] = {};
而不是
users[token] = [];
我会在新连接到来时关闭所有其他连接,所以新的连接处理程序是这样的
wss.on('connection', function connection(ws, req) {
const myURL = new URL("https://example.com" + req.url);
var token = myURL.searchParams.get('token');
ws.send("success");
exists = users.hasOwnProperty(token);
for(const token in users){ // close all existing connections
users[token]["ws"].send("fail");
users[token]["ws"].close();
}
if (exists) {
users[token]["ws"] = ws; // update websocket
}
else {
users[token] = {ws: ws}; // add new websocket to users
// same thing as
// users[token] = {}
// users[token]["ws"] = ws
}
}