从服务器检查客户端是否仍然连接

时间:2019-08-11 18:42:18

标签: javascript socket.io next.js

我正在开发一个应用程序,用户可以在该应用程序中看到同一网络中的其他用户并与之交互。

例如,如果我打开example.com,我应该可以在用户列表中看到自己。如果同一网络中的另一个用户打开example.com,则我应该看到自己和该用户。

我使用socket.io和IP地址开发了此功能。如果用户打开example.com,则会生成uuid并将其及其IP地址发送到后端。 我的假数据库看起来像这样。

// fake DB
const connections = {
  '2a02:a451:60ef:1:ec2c:41dd:3d8:cd34': [ 
    'af10d0f3-fe10-4a3b-a6da-bb97b25db46c',
    'bd220f6e-8559-4024-8398-a486ad2550cc' 
  ]
};

但是现在我不知道如果用户离开该页面,如何从该数据库中删除该用户。我认为我可以做到这一点,方法是通过发球发出ping个事件,然后从客户端订阅此事件,然后像这样返回pong事件以回复:

// socket.io server
io.on("connection", socket => {
  setInterval(() => {
    socket.broadcast.emit("ping");
  }, 5000);
});

但是事实证明,如果有多个用户打开网站,则服务器会创建多个间隔。有什么办法可以解决这个问题?

0 个答案:

没有答案