【发布时间】: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