Я пытаюсь настроить для них концентраторы SignalR и отдельные события OnDisconnected.
Ради вопроса, на какой-то странице у меня есть два Хаба:
StatusHub: обрабатывает статус пользователя на веб-сайте. Методы этого концентратора вызываются на каждой странице веб-сайта и обрабатывают логику подключения и отключения пользователя для обновления статуса пользователя при его перемещении по веб-сайту.
ChatHub: Обрабатывает все, что связано с чатом на сайте в режиме реального времени. Методы этого хаба вызываются только с определенной страницы веб-сайта, когда пользователь нажимает определенные кнопки.
Проблема, с которой я сталкиваюсь, заключается в том, что, несмотря на то, что оба класса концентраторов реализуют свои собственные версии методов OnConnected и OnDisconnected, запускаются только методы StatusHub, а методы ChatHub не вызываются.
Не знаю, так задумано или я что-то не так делаю. До сих пор я читал некоторые статьи и ответы, в которых говорится, что подключение к хаб-серверу является одиночным подключением и что я не подключаюсь к конкретному хабу, я подключаюсь к хаб-серверу в целом, поэтому только один из методов когда-нибудь узнают и назовут.
Может ли кто-нибудь, у кого больше опыта работы с SignalR, сказать мне, есть ли способ разделить события подключения и отключения двух концентраторов или это действительно так?
Ниже я приведу лишь несколько фрагментов кода, чтобы лучше проиллюстрировать сценарий, но если вам нужно увидеть больше кода, просто спросите, и я добавлю его.
StatusHub.cs
public class StatusHub : Hub {
public override Task OnDisconnected()
{
//handles the disconnected event as needed
return base.OnDisconnected();
}
public override Task OnConnected()
{
//handles the connected event as needed
return base.OnConnected();
}
}
ChatHub.cs
public class ChatHub : Hub {
public override Task OnDisconnected()
{
//should handle the chat disconnected event but is never reached
return base.OnDisconnected();
}
public override Task OnConnected()
{
//should handle the chat connected event but is never reached
return base.OnConnected();
}
}
Код, запускающий соединение с хаб-сервером (выполняется на каждой странице):
$.connection.hub.start().done(function() {
//a lot of code here (irrelevant to the question I think)
});