如何维护socket.io + node.js中的当前活动套接字?

我开始学习socket.io和node.js我试图做一些非常基本的东西(或者我想),但我无法做到。

这是我的节点应用程序:

var app = require('http').createServer(handler) , io = require('socket.io').listen(app) , fs = require('fs') app.listen(8080); var clients = []; function handler (req, res) { fs.readFile(__dirname + '/index.html', function (err, data) { if (err) { res.writeHead(500); return res.end('Error loading index.html'); } res.writeHead(200); res.end(data); }); } io.sockets.on('connection', function (socket) { clients[socket.id] = true; socket.broadcast.emit('conection', { id: clients}); }); 

我想存储连接的客户端,然后,onConnection发送连接的所有客户端。 关键是,我不知道如何正确使用JavaScript上的数组,因为使用clients.push(socket.id)函数,但是,然后,我将无法pop一个socket.id一旦客户端断开连接循环遍历数组,对吧?

即使有一种获取当前打开的套接字的方法,我也想这样做,因为我不会使用当前套接字会话的应用程序,而是使用其他的东西。

我知道这是一个真正的低噪音问题,请耐心等待:)

您应该像第一次一样将套接字标识放在数组中,并在断开连接时删除断开连接的客户端的套接字标识。 你不需要遍历一个数组来删除一个元素 ,你可以使用array.indexOf(element)来实现该元素来确定元素的位置和array.splice(position,1)来删除该元素:

 function deleteFromArray(my_array, element) { position = my_array.indexOf(element); my_array.splice(position, 1); } io.sockets.on('connection', function (socket) { clients.push(socket.id); socket.broadcast.emit('conection', { id: clients}); socket.on('disconnect', function() { deleteFromArray(clients, socket.id); }); }); 

资源:

在JavaScript中删除数组元素 – 删除与拼接