Завершение работы клиента asp.net websocket в .Net core 2.1 - PullRequest
0 голосов
/ 24 сентября 2019

Я пишу промежуточное ПО, используя сервер веб-сокетов aspnet core 2.1 и клиентские API.Все работает очень хорошо, но я хотел бы, чтобы некоторые рекомендации по передовой практике для серверной стороны завершали работу клиента веб-сокета, который считается не отвечающим.

Клиент посылает сердцебиение каждые (скажем) 5 секунд.У меня есть таймер на стороне сервера, который запускает и проверяет, чтобы убедиться, что клиент отправил сердцебиение в пределах интервала ожидания сердцебиения (например, 2 * интервал сердцебиения, скажем, таймер срабатывает каждые 10 секунд).

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

var span = DateTime.Now - lastHeartbeat;
// No heartbeat within the configured limit, declare the client dead.
if (span.TotalMilliseconds > HEARTBEAT_TIMEOUT)
{
    if (_websocket.State == WebSocketState.Open)
    {
        heartbeatTimer.Change(Timeout.Infinite, Timeout.Infinite);  // stop the timer
        Console.WriteLine($"client: {ID} heartbeat interval expried, client is unresponsive, closing the websocket");
        await _websocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "client is unresponsive", CancellationToken.None);
    }
}

Мой код прослушивателя сервера веб-сокетов находится в попытке / перехвате / наконец, поэтому, когда произойдет завершение, я смогу чисто завершить работу.

Я не смог найти ничего в официальных документах Microsoft о сервере, завершающем работу клиента.Ищу совет.Это адекватный подход?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...