Javascript 如何在socket.io+;node.js?
我开始学习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) {
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它正在解决,我学到了一些新的东西:)很高兴帮助,顺便说一句,你也可以投票给一个被接受的答案。