2016-04-20 2 views
2

Я экспериментирую с функцией ServerStore ServiceStack и хочу сделать своеобразное тестовое приложение «онлайн-пользователей». Идея заключается в том, что я хочу обновлять каждого пользователя, который подключается к каналу «Пользователи» всякий раз, когда новый пользователь присоединяется или уходит. Проблема в том, что я не могу найти способ обнаружить, когда подписка/пользователь уходит/отключается.Событие ServiceStack для отсоединения клиента

ответ

0

ServerEventsClient.OnCommand обратного вызова вызывается, когда пользователь присоединяется, Листья или Обновляет подписку ServerEvent.

Вы также можете получить список всех активных абонентов из канала в любое время с:

var sseClient = new ServerEventsClient(...); 

var response = sseClient.ServiceClient.Get(new GetEventSubscribers { 
    Channels = sseClient.Channels 
}); 

Каким будет возвращать список нетипизированного Dictionary<string,string> содержащих абонент Публичный.

Я также только что добавил типизированное API для GetChannelSubscribers() в this commit, который теперь доступен из v4.0.57 on MyGet, который обеспечивает типизированный API для извлечения всех пользователей с подпиской на ServerEventsClient каналов, например:

var channelSubscribers = sseClient.GetChannelSubscribers(); 
+0

Существует ли эквивалентные события на на стороне сервера, мне нужно создать своего рода классический клиентский сервер типа TCP/IP, где сервер должен запускать фоновый материал и обновлять клиентов (и не зависеть от того, кто-то звонит кому-то, чтобы начать делать это). – Ravenheart

+0

Также на стороне примечания, когда клиент отключается нечисто (скажем, вы убиваете приложение), и у них нет возможности отменить регистрацию, сервер не удаляет их из списка активных подписчиков (/ event-абонентов) в течение длительного времени времени (в области минут). – Ravenheart

+0

@Ravenheart вы можете зарегистрировать обратный вызов на 'ServerEventsFeature.OnUnsubscribe', он также запускается, когда клиент не отменяет регистрацию, так как они перестанут посылать heartbeats, а после' ServerEventsFeature.IdleTimeout' (по умолчанию 30 секунд) он будет автоматически отменен , – mythz

Смежные вопросы