Я использую SignalR в своем проекте Angular и могу присоединиться к группе, вызвав Hub метод под названием JoinGroup.
сервис.тс:
private startConnection(): any {
this.connection
.start()
.done((data: any) => {
this.proxy.invoke('JoinGroup', 'demoGroup'); //join user to a group
})
}
Hub.cs:
public Task JoinGroup(string groupName)
{
return Groups.Add(Context.ConnectionId, groupName);
}
public Task LeaveGroup(string groupName)
{
return Groups.Remove(Context.ConnectionId, groupName);
}
Точно так же в моем хабе есть метод выхода из группы. Однако я понятия не имею, когда я могу вызвать этот метод на стороне клиента, как для JoinGroup. Конечно, я знаю, что в моем хабе есть методы OnConnected(), OnReconnected() и OnDisconnected(), и я могу передать имя группы при подключении. Но я хочу знать, как выйти из группы и когда?





Когда удалять соединение из группы, зависит от вашего конкретного сценария. Например, вы можете захотеть удалить соединение из группы, когда пользователь уходит со страницы и т. д.
Но членство в группе не сохраняется при разных подключениях. Это означает, что вам не нужно вручную выходить из групп при отключении подключения SignalR. При отключении (намеренно или из-за ошибки) все членства в группах будут потеряны. Цитирую Документы Майкрософт:
Group membership isn't preserved when a connection reconnects. The connection needs to rejoin the group when it's re-established.
Группа — это набор соединений, подключенных к серверу или кластеру серверов, поэтому только сервер знает о группах и может удалять участников из группы. Клиент может вызывать методы сервера только для удаления членства в группах.
Клиент автоматически покидает все группы при отключении. Необходимость удаления из групп вручную зависит от вашей бизнес-логики: если необходимо поддерживать подключение SignalR, но отписаться от push-уведомлений, предназначенных для группы, вам необходимо вручную вызвать методы сервера для удаления из группы.
Есть ли у вас какие-либо идеи о проблеме концентратора SignalR на SignalR: не удается получить доступ к методам концентратора по умолчанию?
Большое спасибо за ответ. Вы имеете в виду, что нет необходимости удалять пользователя из группы? С другой стороны, мне также интересно, есть ли подобное событие на стороне клиента, которое я могу определить для вызова метода LeaveGroup. Как видно, я подключаюсь к группе по событию connection.on. Как насчет ухода из этой группы?