0

在我的正常设置中,无论是否有另一个客户端接收它,客户端都会向我的服务器发送数据。我怎样才能使它只在用户数> 1时发送数据包?我正在使用带有 socket.io 的节点。

4

1 回答 1

2

为此,您需要侦听connection服务器(以及disconnect)上的事件并维护连接在“全局”变量中的客户端列表。当连接超过 1 个客户端时,向所有连接的客户端发送一条消息,以了解它们可以开始发送消息,如下所示:

var app = require('express').createServer(),
    io = require('socket.io').listen(app);

app.listen(80);

//setup express

var clients = [];

io.sockets.on('connection', function (socket) {
    clients.push(socket);

    if (clients.length > 1) {
        io.socket.emit('start talking');
    }

    socket.on('disconnect', function () {
        var index = clients.indexOf(socket);

        clients = clients.slice(0, index).concat(clients.slice(index + 1));

        if (clients.length <= 1) {
            io.sockets.emit('quiet time');
        };
    });
});

注意:我在这里假设套接字被传递给断开事件,我很确定它是但没有机会测试。

disconnect事件不会接收传递给它的套接字,但是因为事件处理程序是在初始连接的闭包范围内注册的,所以您将可以访问它。

于 2012-04-23T04:10:46.287 回答