处理浏览器刷新socket.io

smu*_*ord 2 socket.io

我需要使用 Node js 来处理用户与聊天应用程序的断开连接。

我不确定如何区分浏览器关闭和用户刷新浏览器之间的区别。

client.on('disconnect', function () {
        console.log( 'Disconnected' );
        // run mysql code to remove user from logged in table
});
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索了几个小时,找不到解决方案。

这看起来很简单,我认为这是我正在使用的关键字。

有人能指出我如何处理这个问题的正确方向吗?

提前致谢。

小智 5

一种方法是生成随机 UID 并将其保存到本地存储。客户端连接后,立即将此 UID 发送到服务器并检查该 UID 是否作为已连接用户存在。在服务器端,设置断开连接超时时间,让用户在其唯一 UID 从“在线用户”数据中删除之前有 15 秒左右的时间。

客户:

// When the client starts, create the uid.
localstorage.setItem('uUID', Math.random().toString(24) + new Date());

// Emit the UID right after connection
socket.emit('userLogin', localstorage.getItem('uUID');
Run Code Online (Sandbox Code Playgroud)

服务器:

var currentUIDS = [];
var userIsConnected = true;


io.sockets.on('connection', function (socket) {
    var currentUID = null;

    socket.on('userLogin', function (data) {
        if (data !== null) {
            if (currentUIDS.includes(data)) {
                userIsConnected = true;
        currentUID = data;
            }
        }
    });

    socket.on('disconnect', function () {
        userIsConnected = false;
        setTimeout(function () {
            if (!userIsConnected) currentUIDS.pop(currentUID);
        }, 15000);
    });
});
Run Code Online (Sandbox Code Playgroud)