2013-02-24 3 views
2

Существует много статей, показывающих, как сделать свою собственную расширенную обработку соединений с помощью SignalR, например this blog post about "Mapping ASP.NET SignalR Connections to Real Application Users".Определение устаревших соединений в сигнале

Все эти решения опираются на события OnDisconnect:

public override Task OnDisconnected() 
{ 
    SignalRConnectionManager.RemoveConnection(Context.ConnectionId); 
    return base.OnDisconnected(); 
} 

Это работает до тех пор, как вы можете рассчитывать на OnDisconnected события. Если ваше приложение выйдет из строя/перезагрузится или перезагрузится сервер, вы не получите событие OnDisconnected для каждого соединения.

Вопрос: У меня есть соединение в моей базе данных. Я знаю, что многие из этих связей устарели. Есть ли возможность в SignalR узнать, является ли соединение устаревшим? Я попробовал

Clients.Client[StaleConnectionId] 

ожидающий null или исключение в случае неправильного идентификатора соединения.

Любые предложения?

ответ

2

Нет никакого способа проверить соединение «Stale». Я предполагаю, что ваши проблемы заключаются в постоянном статусе пользователей, и вы хотите знать, когда их закончить.

У SignalR не удалось сменить безопасные соединения на основе активности бездействия, поэтому я бы рекомендовал строить в режиме ожидания логику приложений, с помощью которой пользователи могут истекать.

Я реализовал эту логику в ShootR (https://github.com/NTaylorMullen/ShootR), если вы хотите иметь основу для работы.

Надеюсь, это поможет!

+0

ОК, я также внедрил некоторые меры предосторожности. Я надеялся найти более чистый раствор ... – Sparhawk

+0

@N. Тейлор Маллен, не могли бы вы сообщить мне, где именно находится логика? – soleiljy

+0

Какую логику вы имеете в виду? Логика в ShootR? –

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