0

私はsocket.ioとioredisの初心者です。このコードは正常に実行されています。しかし、切断されたユーザー (ユーザーがタブを閉じたとき) を検出し、オンライン ユーザーをすべてのクライアントに表示する方法がまだわかりませんでした。

redis.subscribe("users");
redis.on("message",function(channel,message){
    console.log('Receive message %s from channel %s', message, channel);
    io.emit(channel,message);
    io.on("disconnect",function(socket){
        console.log("a user disconnected");
    });
});

どんな助けでも大歓迎です。

socket.io-redis の更新

var io = require('socket.io')(server);
var redis = require('socket.io-redis');
io.adapter(redis({ host: '127.0.0.1', port: 6379 }));

io.sockets.on('connection', function(socket) {
  var current_user = {};
  socket.on('message', function(data) {
    current_user = json.Parse(data);
    socket.broadcast.emit('message', data);
  });

  socket.on('disconnect', function () {
    console.log(current_user); // Now I know which user is disconnected ? 
    io.emit("dc_user",current_user);
  });
});

これは、どのユーザーが切断されているかを他のクライアントに通知するための良いアプローチですか?

4

1 に答える 1

1

socket.io-redis アダプターを使用してみてください。

var io = require('socket.io')(server);
var redis = require('socket.io-redis');
io.adapter(redis({ host: '127.0.0.1', port: 6379 }));

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

  socket.on('message', function(data) {
    socket.broadcast.emit('message', data);
  });

  socket.on('disconnect', function () {
    io.emit('user disconnected');
  });


});
于 2016-07-02T14:23:28.410 に答える