0

在读取服务器以从套接字读取之前,我在负载下接受连接并将其设置为 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 中停留的时间比在空闲系统上的时间长一点负载(许多其他任务/线程和少量cpu)。

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

4

1 回答 1

0

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

于 2020-10-16T08:43:40.397 回答