Я использую SignalR как своего рода архитектуру чата.Прекрасно работает при настройке нашего единого сервера IIS.Для проверки масштабируемости: Sclaing-out-SignalR
Если вы используете концентраторы, вы можете решить проблему «Я в сети», запросив подключенных клиентов, например this
var clients = Hub.GetClients<Type of your hub here>();
и запросите идентификатор пользователя у каждого клиента.В случае потери какого-либо соединения вы должны найти в сети пользователей БД, которые больше не являются клиентами хаба.
ИЛИ
Другой подход заключается вустановить пользователя онлайн как первое сообщение от пользователя к концентратору.«Привет, я там».И используйте это решение
public class MyHub : Hub, IDisconnect
{
public Task Disconnect()
{
// Query the database to find the user by it's client id.
var user = db.Users.Where(u => u.ConnectionId == Context.ConnectionId);
return Clients.disconnected(user.Name);
}
}
Для обработки события отключения.
Надеюсь, я мог бы дать вам несколько идей.