System.Net.WebSockets Connection OPEN до того, как сервер прослушивает

У меня возникают проблемы с настройкой, которая находится под нагрузкой, принимая соединение и устанавливая его на OPEN до того, как сервер будет прочитан для чтения из сокета.

Пример (не фактический код):

while (true) {
    var objContext = HttpListenerContext.GetContext();
    if (objContext.Request.IsWebSocketRequest){
        var WebSocket = (await HttpListenerContext.AcceptWebSocketAsync(null)).WebSocket;
        while (WebSocket.State == WebSocketState.Open) {
            var buffer = new byte[BUFFERSIZE];
            var result = await WebSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken);
            ....
        }
    } 
}

При добавлении точек останова на клиенте и сервере я заметил, что после вызова AcceptWebSocketAsync клиенты получают, что соединение "ОТКРЫТО" и готово к использованию, и начинают отправлять данные.

Проблема в том, что ReceiveAsync в то время еще не запущен, причина в том, что ReceiveAsync немного медленнее запускает задачу, они остаются в WaitingForActivation немного дольше, чем в неактивной системе, из-за того, что рассматриваемый сервер находится под высоким загрузка (множество других задач / потоков и небольшое количество процессоров).

Это нормальное поведение и как его остановить?

1 ответ

Решение

Если бы кто-то просмотрел мой код, этот человек обнаружил, что вызов ReceiveAsync не является проблемой, информация находится в буфере.
Выше было то, что обработчик событий был присоединен слишком поздно.

Другие вопросы по тегам