SignalR Clients.User() 不触发客户端
SignalR Clients.User() doesn't trigger the client
我使用 SignalR 和 .NET6。我有一个三向设置,其中有一个服务器 (C#)、一个主机 (C#) 和许多客户端 (JS)。
我的服务器从任何将其连接到主机的客户端接收到客户端声明。客户端和主机实际上并不认识对方,只能通过服务器相互了解。
当我的客户端声明自己并提供一个访问令牌以绑定到主机时,我触发了以下两行:
await Clients.Caller.SendAsync(ClientListenEvent.DeclareClientAck, (int)response, clientId);
await Clients.User(host.HostId).SendAsync(HostListenEvent.ClientJoin, clientId);
第一行让Client知道它在服务器上声明成功了。然而,第二行从不触发关联主机上的任何内容。它只是由服务器发出,然后主机永远不会接收它。
在主机上应该触发此 SignalR 事件:
connector.On<string>("clientJoin", (clientId) =>
{
OnClientJoin?.Invoke(this, clientId);
Debug.Log($"Adding Client: [{_indexToClientMap.Count};{clientId}]");
_indexToClientMap.Add(_indexToClientMap.Count, clientId);
});
但它从来没有。我不太确定为什么会这样,今天我已经尝试调试了几个小时。有帮助吗?
原来它不起作用的原因是因为我使用了 User()
而不是 Client()
。
所以应该是 Clients.Client(...)
而不是 Clients.User(...)
并且类似地,如果您需要发送给多个客户端,您可以使用 Clients.Clients(...)
.
原来 User 是服务器自己的上下文中的经过身份验证的用户,而 Client 指的是连接。
我使用 SignalR 和 .NET6。我有一个三向设置,其中有一个服务器 (C#)、一个主机 (C#) 和许多客户端 (JS)。
我的服务器从任何将其连接到主机的客户端接收到客户端声明。客户端和主机实际上并不认识对方,只能通过服务器相互了解。
当我的客户端声明自己并提供一个访问令牌以绑定到主机时,我触发了以下两行:
await Clients.Caller.SendAsync(ClientListenEvent.DeclareClientAck, (int)response, clientId);
await Clients.User(host.HostId).SendAsync(HostListenEvent.ClientJoin, clientId);
第一行让Client知道它在服务器上声明成功了。然而,第二行从不触发关联主机上的任何内容。它只是由服务器发出,然后主机永远不会接收它。
在主机上应该触发此 SignalR 事件:
connector.On<string>("clientJoin", (clientId) =>
{
OnClientJoin?.Invoke(this, clientId);
Debug.Log($"Adding Client: [{_indexToClientMap.Count};{clientId}]");
_indexToClientMap.Add(_indexToClientMap.Count, clientId);
});
但它从来没有。我不太确定为什么会这样,今天我已经尝试调试了几个小时。有帮助吗?
原来它不起作用的原因是因为我使用了 User()
而不是 Client()
。
所以应该是 Clients.Client(...)
而不是 Clients.User(...)
并且类似地,如果您需要发送给多个客户端,您可以使用 Clients.Clients(...)
.
原来 User 是服务器自己的上下文中的经过身份验证的用户,而 Client 指的是连接。