问题描述
如果我对连接的用户有以下情况
`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");