使用 socket.io 对 seen/unseen 条消息执行操作
Perform action on seen/unseen messages with socket.io
在基于 Nodejs/SocketIO/React 的聊天室应用程序中处理 seen/unseen 消息的最佳实践是什么。
考虑用户 1 向房间发送消息。如果另一个用户看到了该消息,通知所有用户消息的状态已被看到。
在我看来,使用消息代理可能是更好的解决方案,而不是套接字。我实际上认为套接字应该只处理同步的聊天消息。但对于 seen/unseen 状态,我更喜欢异步的消息代理。在大规模应用中是否有任何解决方案或最佳实践?
不清楚你目前尝试了什么,这意味着我只能建议解决方案以实现你的目标。
为了首先识别一条消息被看到,IntersectionObserver
是一个内置的 API,它检测元素何时进入视口,这意味着它是可见的,因此;明显看到了我在下面的代码中添加了注释,您应该在其中添加一个函数来调用已看到消息的服务器,但是,这取决于您的实现。
const observer = new window.IntersectionObserver(([entry]) => {
if (entry.isIntersecting) {
// Send a message to the server that the user has viewed the message.
// Eg. socket.emit('read-message', message.id)
return
}
}, {
root: null,
threshold: 0.1,
})
observer.observe(document.getElementById(message.id));
此外,不需要使用消息代理,因为 socket.io 可以处理像这样的简单交互。
然后您需要向服务器发送一条消息,表示已看到指定的消息 ID,然后向所有其他客户端广播状态已更改,并更新它以读取 - 如果需要的话。
在基于 Nodejs/SocketIO/React 的聊天室应用程序中处理 seen/unseen 消息的最佳实践是什么。
考虑用户 1 向房间发送消息。如果另一个用户看到了该消息,通知所有用户消息的状态已被看到。
在我看来,使用消息代理可能是更好的解决方案,而不是套接字。我实际上认为套接字应该只处理同步的聊天消息。但对于 seen/unseen 状态,我更喜欢异步的消息代理。在大规模应用中是否有任何解决方案或最佳实践?
不清楚你目前尝试了什么,这意味着我只能建议解决方案以实现你的目标。
为了首先识别一条消息被看到,IntersectionObserver
是一个内置的 API,它检测元素何时进入视口,这意味着它是可见的,因此;明显看到了我在下面的代码中添加了注释,您应该在其中添加一个函数来调用已看到消息的服务器,但是,这取决于您的实现。
const observer = new window.IntersectionObserver(([entry]) => {
if (entry.isIntersecting) {
// Send a message to the server that the user has viewed the message.
// Eg. socket.emit('read-message', message.id)
return
}
}, {
root: null,
threshold: 0.1,
})
observer.observe(document.getElementById(message.id));
此外,不需要使用消息代理,因为 socket.io 可以处理像这样的简单交互。
然后您需要向服务器发送一条消息,表示已看到指定的消息 ID,然后向所有其他客户端广播状态已更改,并更新它以读取 - 如果需要的话。