我正在开发一个使用 SignalR 的 ASP.NET MVC 应用程序,该应用程序实现了 WhatsApp 聊天,用户可以从应用程序向 WhatsApp 号码发送消息,然后可以从那里回复消息,从而在页面上显示响应。到目前为止,我必须将从 WhatsApp 帐户发送到不同浏览器上每个选项卡的消息分开,因为我使用的是 SignalR
connectionID
,因为每次加载页面时都会建立一个新连接。
从客户端,我发送消息如下
connection.invoke("SendMessage", user, message).catch(function (err) {
return console.error(err.toString());
});
从服务器,我将消息发送给所有客户端,如下
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
对于特定客户,我发送带有
connectionID
的消息
await _hubContext.Clients.Client(idConexion).SendAsync("ReceiveMessage", "Message:", textMessage[0].Text.Body);
我想要的是,无论打开多少个选项卡,同一个浏览器都被视为只有一个连接。我从文档和其他 StackOverflow 问题中知道,每个打开的选项卡都是不同的连接,但我只需要向浏览器的所有活动选项卡广播相同的消息。我当前的逻辑是,使用来自 WhatsApp Business API 的每条消息的唯一 WAMID 将消息发送到特定连接。
您将需要检查将每个用户放入他们自己的“组”中。然后,您不再发送到连接,而是发送到群组。
这样,无论打开多少个选项卡,当从集线器发送时,它们都会收到相同的消息。
Clients.Group(groupName).addChatMessage(name, message);
await Clients.Group(groupName).SendAsync("Send", $"{Context.ConnectionId} has joined the group {groupName}.");