Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在socket.io+;node.js?_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript 如何在socket.io+;node.js?

Javascript 如何在socket.io+;node.js?,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我开始学习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) {

我开始学习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)
功能很好,但是,一旦客户端断开连接而不在数组中循环,我就无法
弹出
socket.id
,对吗

即使有一种方法可以获取当前打开的套接字,我也希望这样做,因为我不会将应用程序用于当前的套接字会话,而是用于其他事情


我知道这是一个很难回答的问题,所以请耐心听我说:)

您应该像第一次那样将套接字id放入阵列中,然后在断开连接时删除断开连接的客户端的socket.id删除元素时不需要遍历数组,可以使用array.indexOf(元素)来确定元素和数组的位置。拼接(位置,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);
  });
});
资源:


您应该像第一次一样将套接字id放入阵列中,并在断开连接时删除断开连接的客户端的socket.id删除元素时不需要遍历数组,可以使用array.indexOf(元素)来确定元素和数组的位置。拼接(位置,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);
  });
});
资源:


非常感谢@alessioalex它正在解决,我学到了一些新的东西:)很高兴帮助,顺便说一句,你也可以投票给一个被接受的答案。非常感谢@alessioalex它正在解决,我学到了一些新的东西:)很高兴帮助,顺便说一句,你也可以投票给一个被接受的答案。