我正在开发一个应用程序,用户可以在该应用程序中看到同一网络中的其他用户并与之交互。
例如,如果我打开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);
});
但是事实证明,如果有多个用户打开网站,则服务器会创建多个间隔。有什么办法可以解决这个问题?