【问题标题】:System.Net.WebSockets Connection OPEN before server is listeningSystem.Net.WebSockets 连接在服务器侦听之前打开
【发布时间】:2020-10-08 14:23:57
【问题描述】:

在读取服务器以从套接字读取之前,我在负载下接受连接并将其设置为 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)。

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

【问题讨论】:

  • 网页可能运行了java代码,java完成后才会返回数据。
  • 不涉及java

标签: c# websocket system.net.websockets


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 2018-12-05
    • 1970-01-01
    • 2017-07-20
    • 2019-03-27
    • 2018-02-15
    相关资源
    最近更新 更多