SignalR 核心接收来自特定用户的消息
SignalR core receive messages from specific user
SignalR 内核非常新,因此关于如何使用它的详细文档非常少见。
我已经完成了 Microsoft 的教程并成功地向所有客户端发送了消息。现在我想为特定用户发送
public Task SendPrivateMessage(string user, string message, string to)
{
return Clients.User(to).SendAsync("ReceiveMessage", user, message);
}
"to" 值是我从
获得的 ConnectionID
public override Task OnConnectedAsync()
{
Console.WriteLine("New ID Connected: " + Context.ConnectionId);
return base.OnConnectedAsync();
}
这是我的客户:
public async void InitSignalRAsync()
{
ChatMessage mess = new ChatMessage();
hubConnection = new HubConnectionBuilder().WithUrl("http://localhost:5000/chatHub").Build();
await hubConnection.StartAsync();
hubConnection.On<string, string>("ReceiveMessage", async (user, message) =>
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
mess.user = user;
mess.message = message;
Messages.Add(mess);
});
});
}
private void Send_Click(object sender, RoutedEventArgs e)
{
hubConnection.InvokeAsync("SendPrivateMessage", User.Text, Text.Text, To.Text);
}
控制台没有记录任何错误,所以我猜它确实发送了,但为什么我收不到?
要通过客户端的 connectionId 发送给客户端,您应该使用 Clients.Client(coonectionId)
,Clients.User() 用于通过用户 Id.to 发送给 uniqe 用户 通过用户 ID 发送消息 您可以尝试如下操作:
- 创建一个 CustomUserIdProvider:
public class CustomUserIdProvider: IUserIdProvider
{
public virtual string GetUserId(HubConnectionContext connection)
{
//get current user id by httpcontext
}
}
然后在 startup.cs:
services.AddSignalR();
services.AddSignalRCore();
services.AddSingleton<IUserIdProvider, CustomUserIdProvider>();
现在在您的中心,您可以通过用户 ID 发送消息:
public void Send(string userId, string message)
{
Clients.User(userId).send(message);
}
有关详细信息,请转到此 link
SignalR 内核非常新,因此关于如何使用它的详细文档非常少见。 我已经完成了 Microsoft 的教程并成功地向所有客户端发送了消息。现在我想为特定用户发送
public Task SendPrivateMessage(string user, string message, string to)
{
return Clients.User(to).SendAsync("ReceiveMessage", user, message);
}
"to" 值是我从
获得的 ConnectionIDpublic override Task OnConnectedAsync()
{
Console.WriteLine("New ID Connected: " + Context.ConnectionId);
return base.OnConnectedAsync();
}
这是我的客户:
public async void InitSignalRAsync()
{
ChatMessage mess = new ChatMessage();
hubConnection = new HubConnectionBuilder().WithUrl("http://localhost:5000/chatHub").Build();
await hubConnection.StartAsync();
hubConnection.On<string, string>("ReceiveMessage", async (user, message) =>
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
mess.user = user;
mess.message = message;
Messages.Add(mess);
});
});
}
private void Send_Click(object sender, RoutedEventArgs e)
{
hubConnection.InvokeAsync("SendPrivateMessage", User.Text, Text.Text, To.Text);
}
控制台没有记录任何错误,所以我猜它确实发送了,但为什么我收不到?
要通过客户端的 connectionId 发送给客户端,您应该使用 Clients.Client(coonectionId) ,Clients.User() 用于通过用户 Id.to 发送给 uniqe 用户 通过用户 ID 发送消息 您可以尝试如下操作: - 创建一个 CustomUserIdProvider:
public class CustomUserIdProvider: IUserIdProvider
{
public virtual string GetUserId(HubConnectionContext connection)
{
//get current user id by httpcontext
}
}
然后在 startup.cs:
services.AddSignalR();
services.AddSignalRCore();
services.AddSingleton<IUserIdProvider, CustomUserIdProvider>();
现在在您的中心,您可以通过用户 ID 发送消息:
public void Send(string userId, string message)
{
Clients.User(userId).send(message);
}
有关详细信息,请转到此 link