使用 SignalR 向浏览器上的所有活动选项卡发送消息

问题描述 投票:0回答:1

我正在开发一个使用 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 将消息发送到特定连接。

asp.net-mvc signalr
1个回答
0
投票

您将需要检查将每个用户放入他们自己的“组”中。然后,您不再发送到连接,而是发送到群组。

这样,无论打开多少个选项卡,当从集线器发送时,它们都会收到相同的消息。

Asp.Net SignalR v4.x 的组文档

Clients.Group(groupName).addChatMessage(name, message);

ASP.NET Core 组文档

 await Clients.Group(groupName).SendAsync("Send", $"{Context.ConnectionId} has joined the group {groupName}.");
© www.soinside.com 2019 - 2024. All rights reserved.