Advice on implementing “presence” for a web site?

后端 未结 2 1177
被撕碎了的回忆
被撕碎了的回忆 2021-01-14 07:19

Ideally, I\'d like to find simple, lightweight code that allows all the web clients connected to my site to maintain real-time status of who else is currently online.

<
相关标签:
2条回答
  • 2021-01-14 07:38

    For real time status, use socket.io. Every time someone connects add them to the connected users list. For accurate stats you will need to keep track of user sessions. See http://www.danielbaulig.de/socket-ioexpress/

    var onlineUsers = {};
    var online = 0;
    
    io.sockets.on('connection', function (socket) {
      onlineUsers[socket.handshake.sessionID] = socket.handshake.session;
      online = Object.keys(onlineUsers).length;
      socket.broadcast.emit('online', online);
    
      socket.on('disconnect', function () {
        delete onlineUsers[socket.handshake.sessionID];
        online--;
        socket.broadcast.emit('online', online);
      });
    });
    
    0 讨论(0)
  • 2021-01-14 07:39

    For anyone reading this in the future. I started with the answer written by fent, but I needed some modifications since things have changed in the intervening 6 years since his answer was published.

    I used a Map rather than an Object for storing the session information. this means that the sessionID is no longer required.

    const onlineUsers = new Map();
    
    io.on('connection', function (socket) {
        console.log('connection initiated');
    
        socket.on('userInfo', userInfo => {
            console.log('userInfo', userInfo);
    
            onlineUsers.set(socket, userInfo);
    
            io.emit('onlineUsers', Array.from(onlineUsers.values()));
        });
    
        socket.on('disconnect', function () {
            console.log(onlineUsers.get(socket));
    
            onlineUsers.delete(socket);
    
            io.emit('onlineUsers', Array.from(onlineUsers.values()));
        });
    });
    
    0 讨论(0)
提交回复
热议问题