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

标签 javascript node.js socket.io

我开始学习 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/

相关文章:

javascript - 关于 replaceText 函数

javascript - 在 JavaScript 中检索 PromiseResolve 数据

node.js - 检查用户是否通过socket io收到消息

javascript - Socket.IO Node js将数据保存到客户端

javascript - Sequelize 从多个表中提取数据并作为对象传递以在 EJS 中呈现

javascript - 使用 onclick 将 'x' 颜色添加到按钮边框

javascript - 如何使用每个或循环解析内部多个 <p> 标签文本?

javascript - 这段代码中的客户端、路径和数据是什么?

node.js - 没有使用这个基本的 socket.io + redis 设置接收事件?

javascript - 客户端如何通过socketio连接到新房间并保留所有旧房间