Ich verwende Javascript und das WS-Paket in ExpressJS, um meinen Server zu erstellen.
Ich baue eine Chat-App für mein Portfolio und meine ursprüngliche Idee war, dass der Client dem Server mitteilt, in welchen Chats sich der Benutzer befindet (Abonnements) und diese in einem subscriptions
Array speichert.
for (let i = 0; i < subscriptions.length; i++) { wss.clients.forEach((client) => { if (json.body.chatId === subscriptions[0][i]){ client.send(message) } }) }
Das ist der Ansatz, den ich möchte, aber die Nachricht wird an jeden verbundenen Client gesendet, was schade ist.
Das Abonnementsobjekt ist nur ein Array, das die IDs der Chats enthält, in denen sich der Benutzer befindet.
Wie sende ich Nachrichten nur an Kunden, die im Chat sind?
首先,您需要维护一个将每个客户端与其订阅的聊天ID进行映射的方法。您可以使用JavaScript的
Map
来实现,其中键是客户端对象,值是他们订阅的聊天ID的数组:当客户端连接到WebSocket时,将其订阅信息存储在subscriptionsMap中。当客户端断开连接时,确保从映射中删除他们的订阅:
现在,当您收到需要发送给特定聊天中的客户端的消息时,遍历连接的客户端,并仅将消息发送给订阅相关聊天ID的客户端: