Notification with socket.io. NodeJS



我正在尝试创建一个通知系统,但是我遇到了一个问题。

我向一个用户发出了加入俱乐部的邀请。

socket.on("notify", async (message) => {
// invite the user John Doe
io.to('socket.id of John Doe').emit('notificaton', msg);
});

但是我怎么得到这个套接字呢?发出邀请通知给他?

John Doe在刷新页面后收到消息,页面从数据库获得通知。但我不想让无名氏每次都刷新查看他的通知。我希望它是实时的。但是要实时向他发送通知,我只能想到一件事,那就是存储套接字。数据库中John Doe的id,并在John Doe每次登录到应用程序时更新,如果John Doe使用相同的帐户登录到多个设备,这可能会导致问题,因为套接字。Id在其他设备中可能不同。而且只有一个设备收到通知。*我不知道是否插座。当使用多个设备登录时,每个设备的Id是不同的*

你能帮我想出一个更好的解决方案吗?

通常,将socket保存在某些内存数据结构中(例如Map对象),其中userID是键,该用户的当前套接字是数据。然后,你可以用用户的userID查找任何用户的套接字,在你的应用程序内部,你使用你的userID(一个不绑定到socket.io的持久的东西)来识别用户。然后,您可以随时查找任何用户的套接字(如果他们当前连接)。

当用户连接时,您将他们的套接字添加到Map对象,当他们断开连接时,您将其删除。您还可以确保套接字的客户端和服务器端。

注意,您不能在数据库中存储socket对象,因为它是一个活动对象,包含不能直接存储在数据库中的本机代码状态。你可以在数据库中存储一个socket.id,它只是一个字符串,但通常你只会为当前连接的用户维护一个内存中的数据结构。

最新更新