侦听服务器之前System.Net.WebSockets连接已打开

时间:2020-10-08 14:23:57

标签: c# websocket system.net.websockets

在正在接受负载并将连接设置为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之后在客户端和服务器上添加断点时,客户端会收到连接为“ OPEN”且可以使用的准备,并开始发送数据。

问题在于当时尚未启动ReceiveAsync,原因是ReceiveAsync开始运行任务的速度稍慢,由于服务器问题,它们在WaitingForActivation中的停留时间比在空闲系统上的停留时间更长处于高负载(很多其他任务/线程和低CPU数量)。

这是正常行为吗?如何停止?

1 个答案:

答案 0 :(得分:0)

有人检查了我的代码,那个人发现稍后调用ReceiveAsync并不是问题,信息在缓冲区中。
更高的是事件处理程序的附加时间太晚了。