Вы можете отправить сообщение конкретному пользователю, используя его идентификатор соединения, поэтому мне нужно создать такой концентратор.GetConnectionId вернет идентификатор подключения этого пользователя, когда он подключится к сигнальному концентратору
public class ConnectionHub : Hub
{
public async Task Send(string userId)
{
var message = $"Send message to you with user id {userId}";
await Clients.Client(userId).SendAsync("ReceiveMessage", message);
}
public string GetConnectionId()
{
return Context.ConnectionId;
}
}
Затем в файле startup.cs
services.AddSignalR();
app.UseSignalR(routes =>
{
routes.MapHub<ConnectionHub>("/connectionHub");
});
Затем код на стороне клиента
(function () {
var connection = new signalR.HubConnectionBuilder().withUrl("/connectionHub").build();
connection.start().then(function () {
console.log("connected");
connection.invoke('getConnectionId')
.then(function (connectionId) {
sessionStorage.setItem('conectionId', connectionId);
// Send the connectionId to controller
}).catch(err => console.error(err.toString()));;
});
$("#sendmessage").click(function () {
var connectionId = sessionStorage.getItem('conectionId');
connection.invoke("Send", connectionId);
});
connection.on("ReceiveMessage", function (message) {
console.log(message);
});
})();
Сначала я вызываю getConnectionId в хабе, чтобы получить идентификатор подключения пользователя, затем я могу отправить сообщение конкретному пользователю, используя его идентификатор подключения.
Надеюсь, что помощь