gpt4 book ai didi

javascript - 如何维护 socket.io + node.js 中的当前事件套接字?

转载 作者:行者123 更新时间:2023-11-30 07:45:02 25 4
gpt4 key购买 nike

我开始学习 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);
});
});

资源:

Deleting array elements in JavaScript - delete vs splice

关于javascript - 如何维护 socket.io + node.js 中的当前事件套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8615241/

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