我开始学习 socket.io 和 node.js 我正在尝试做一些非常基本的事情(或者我认为),但我做不到。
这是我的 Node 应用程序:
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
一旦客户端断开连接而不循环遍历数组,对吧?
即使有一种方法可以获取当前打开的套接字,我也想以这种方式进行,因为我不会将应用程序与当前套接字 session 一起使用,而是与其他东西一起使用。
我知道这是一个非常菜鸟的问题,所以请耐心等待 :)
最佳答案
您应该像第一次一样将套接字 ID 放入数组中,并在断开连接时删除断开连接的客户端的 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 - 如何维护 socket.io + node.js 中的当前事件套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8615241/