【问题标题】:ASP NET Core WebSocket acceptance delayASP NET Core WebSocket 接受延迟
【发布时间】:2020-05-04 09:24:23
【问题描述】:

我有一个在 ASP .NET Core 中运行的 Websocket 服务器。一旦服务器达到 15 个并发 websocket 连接,它开始每秒只接受一次新连接。最初的 15 个是即时的,但未来的连接会延迟。

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

那我的配置只包括基础部分。

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseWebSockets();
            app.UseMiddleware<WebsocketMiddleware>();

            app.UseStaticFiles();
        }

最初我怀疑这可能是自定义中间件中的处理问题,但在诊断发现后,没有发现瓶颈。

ASP NET Core 并发连接延迟有隐藏配置吗?

10:15:15 INF] Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://localhost:5000/
10:15:16 INF] Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://localhost:5000/
10:15:17 INF] Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://localhost:5000/
10:15:18 INF] Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://localhost:5000/
10:15:19 INF] Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://localhost:5000/

这些请求使用 JMeter 进行测试,立即创建 20 个 websocket 连接,但服务器暂停请求导致超时。

【问题讨论】:

  • 你使用 ws.IsAlive 方法吗?多常 ? ws.IsAlive 内部发送 ping(同步)
  • 我不使用 .IsAlive,我使用 .State 来识别连接是否仍然打开并发送/接收直到出错...
  • 我不使用socket.io,这是一个ASP NET Core应用程序

标签: c# asp.net-core websocket


【解决方案1】:

我也发现了这个问题。我在liunx上部署,发现第一个请求会创建大量线程,然后第二个请求很快,因为线程已经创建。不知道为什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多