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 回答