仅向与SignalR

问题描述

如果我对连接的用户有以下情况

`clientwebsiteA -> hubA -> groupA -> id:[email protected]`

`cliebtwebsiteB -> hubA -> groupB -> id:[email protected]`

用户george已连接并登录到两个不同的网站客户端(同时),每个客户端都连接到一个信号发送器hubA(注意:集线器a是一个webapp,承载多个集线器)。

如果我只想发送邮件到hubA.groupA.id:@george.email.com。
这可能吗?

或者如果我向...发送消息

`clients.User("[email protected]")`

他会在两个联系人上收到消息吗?

我希望看到一种类似的方法 clients.Group("A").User("[email protected]").SayHello()

clients.UserInGroup("A",id:[email protected]").SayHello()

如果这不可能,那么我可以使用2个不同的集线器(具有2条不同的路线)来实现

M $表示多个集线器共享与信令服务器的同一连接。 https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-server#multiplehubs

解决方法

如果我只想发送消息到hubA.groupA.id:@george.email.com。 这可能吗?

如果用户george从两个不同的客户端应用程序(clientwebsiteA和clientwebsiteB)连接到同一中心服务器(hubA),则用户乔治将建立到中心服务器的两个连接(具有两个不同的ConnectionId)。在这种情况下,要将消息发送到特定的客户端用户george(从clientwebsiteA),您可以将用户映射到集线器服务器上的连接(实现user-site-connectionId映射),以便可以根据用户和网站,然后使用connectionId将消息发送给特定用户,如下所示。

await Clients.Client(connectionId_here).SendAsync("SayHello");

或者您可以实现和使用单用户组。

//join group while george connect from site A

await Groups.AddToGroupAsync(connectionId_here,"SiteAGroupAGeorge");

然后,当您只想与该用户联系时,您可以向该组发送消息。

await Clients.Group("SiteAGroupAGeorge").SendAsync("SayHello");