Socket.io 每次刷新html页面时是否添加套接字io用户连接?
我有一个添加了socket io和Express的nodeJS应用程序,如下所示: 服务器:Socket.io 每次刷新html页面时是否添加套接字io用户连接?,socket.io,Socket.io,我有一个添加了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 client
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>
var socket=io.connect('http://localhost');
目前服务器只提供一个html页面。
我发现,在html和服务器之间建立套接字连接后(此时storeEachSocket.length为1,clients.length为1),如果我刷新此html页面,storeEachSocket.length和clients.length都将为2,表示此html和服务器之间有2个套接字连接。我想知道这是否正常?即使在创建第二个套接字连接之后,第一个套接字连接也不会消失
我还想知道,如果我打算跟踪这个用户(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.handshake.query不包含socket.handshake.query