如何使用socket.io在浏览器和服务器之间发送数据包,但仅限于有多个客户端?

时间:2012-04-23 03:47:19

标签: node.js socket.io

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

1 个答案:

答案 0 :(得分:2)

要执行此操作,您需要监听服务器上的connection事件(以及disconnect)并维护一个以“全局”变量连接的客户端列表。当连接多个客户端时,向所有连接的客户端发送一条消息,知道他们可以开始发送消息,如下所示:

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事件,我很确定它是,但没有机会测试。 < /击>

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