0

私の通常のセットアップでは、クライアントは、受信する別のクライアントがあるかどうかに関係なく、サーバーにデータを送信します。ユーザー数が 1 を超える場合にのみパケットを送信するようにするにはどうすればよいですか? 私はsocket.ioでノードを使用しています。

4

1 に答える 1

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渡されたソケットを受け取りませんが、イベント ハンドラーは初期接続のクロージャー スコープ内に登録されているため、アクセスできます。

于 2012-04-23T04:10:46.287 に答える