我正在为我的服务器使用JavaScript和expressjs中的ws包。
我正在为我的投资组合构建一个聊天应用程序,最初我的想法是让客户端告诉服务器用户正在(订阅)哪些聊天,并将它们存储在subscriptions
数组中。
for (let i = 0; i < subscriptions.length; i++) {
wss.clients.forEach((client) => {
if (json.body.chatId === subscriptions[0][i]){
client.send(message)
}
})
}
字符串
这就是我想如何处理它,但消息被发送到每个连接的客户端,这是可怕的。
subscriptions对象只是一个数组,其中包含用户所在聊天的id。
如何将消息仅发送给聊天中的客户端?
1条答案
按热度按时间2ul0zpep1#
首先,您需要维护每个客户端到其订阅的聊天ID的Map。您可以使用JavaScript
Map
来实现这一点,其中键是客户端对象,值是它们订阅的聊天ID的数组:字符串
当客户端连接到WebSocket时,将其订阅信息存储在subscriptionsMap中。当客户端断开连接时,请确保从Map中删除其订阅:
型
现在,当您在特定聊天中收到需要发送给客户端的消息时,请遍历已连接的客户端,并仅将消息发送给订阅了相关聊天ID的客户端:
型