gpt4 book ai didi

socket.io - 每次 html 页面刷新时都添加了 socket io 用户连接?

转载 作者:行者123 更新时间:2023-12-04 11:09:45 28 4
gpt4 key购买 nike

我有一个添加了 socket io 和 Express 的 nodeJS 应用程序,如下所示:

服务器:

var storeEachSocket=[];
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
storeEachSocket.push(socket);
console.log(storeEachSocket.length);
var clients = io.sockets.clients(); //clients is an array
console.log(clients.length);
});

客户:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
</script>

目前只有一个 html 页面由服务器提供服务。
我发现,在 html 和服务器之间建立套接字连接后(此时 storeEachSocket.length 为 1 并且 clients.length 为 1 ),如果我刷新此 html 页面,storeEachSocket.length 和 clients.length 将为 2 ,说明这个html和服务器之间有2个socket连接。我想知道这正常吗?即使在我创建第二个套接字连接之后,第一个套接字连接也不会消失?

而且我也想知道,如果我要跟踪这个用户(html),如果一个用户使用了两个套接字连接,我该怎么办?

最佳答案

刷新页面不会添加新连接,它基本上删除当前连接并创建另一个新连接。我认为您应该添加一个监听器来断开连接事件并删除已断开连接的数组中的套接字。我也不相信 io.sockets.clients() 会在刷新后返回 2,因为我已经在我的机器上测试过它。

如果要跟踪用户,则需要有用户 ID 并将其存储到键/值对集合中。然后,您可以通过检查 thr 授权处理程序中的集合来限制用户创建 2 个连接。

    var storeEachSocket = {};
io.set('authorization', function(handshake, accept){
var user = handshake.query;
if(user.id in storeEachSocket)
accept('User already connected', false);
else
accept(null, true);
});

io.on('connection', function(socket){
var user = socket.handshake.query;
storeEachSocket[user.id] = socket;
});

io.on('disconnect', function(socket){
var user = socket.handshake.query;
delete storeEachSocket[user.id]
});

关于socket.io - 每次 html 页面刷新时都添加了 socket io 用户连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13815177/

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