我的应用程序在生产环境中接受握手的问题大约有一半的时间。在与生产相同的本地计算机和登台环境中,它每次都可以运行。
这是一个使用aspnet-signalr / 1.1.4的.Net Core 2.1应用程序
我未配置SignalR在启动时使用任何详细信息。
app.UseSignalR(routes => { routes.MapHub<PortfolioHub>("/loadpagedetailsjob"); });
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Dashboard}/{action=Index}/{id?}");
});
我的PortfolioHub只是Hub类的直接实现
以及在我的页面中
var connection = new signalR.HubConnectionBuilder()
.withUrl('/loadpagedetailsjob')
.configureLogging(signalR.LogLevel.Information)
.build();
connection.start().then(function () {
connection.invoke("Subscribe");
});
似乎尝试协商Web套接字,然后长时间轮询,但都失败了。但请求返回200
由于这只是有时发生,所以我在解决问题时遇到了问题。我目前唯一的怀疑是,由于我的环境位于AWS负载平衡之后,因此协商请求被路由到可能导致此问题的其他服务器上?
感谢您的帮助。
SignalR要求始终由同一服务器处理一个连接。典型的解决方案是将负载平衡器配置为使用粘性会话。启用粘性会话后,负载均衡器会将同一用户的请求路由到同一后端服务器。
https://docs.microsoft.com/en-us/aspnet/core/signalr/scale?view=aspnetcore-3.1