检查SignalR连接是否保持打开状态,如果连接不是持久性的,则需要使用负载均衡器将请求映射到正确的服务器。
可以在负载均衡器中设置CookieAffinity以确保客户端始终与相同的服务器通信:
services.AddSignalR(options =>
{
options.EnableDetailedErrors = true;
//设置漂移
options.ClientTimeoutInterval = TimeSpan.FromSeconds(30);
options.KeepAliveInterval = TimeSpan.FromSeconds(10);
}).AddStackExchangeRedis(Configuration.GetConnectionString("Redis"))
.AddMessagePackProtocol()
.AddNewtonsoftJsonProtocol(options =>
{
options.PayloadSerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});
services.AddSignalR().AddSignalRRedis(Configuration.GetConnectionString("Redis"));
app.UseCookiePolicy();
app.UseSession(new SessionOptions()
{
IdleTimeout = TimeSpan.FromMinutes(15),
Cookie = new CookieBuilder()
{
HttpOnly = true
}
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
//设置漂移
app.UseSignalR(route =>
{
route.MapHub(ChatHub.HubUrl, options =>
{
options.ApplicationMaxConcurrency = -1;
});
});
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
//设置漂移
endpoints.MapHub(ChatHub.HubUrl, options =>
{
options.ApplicationMaxConcurrency = -1;
});
endpoints.MapGrpcService();
});
app.UseSignalR(route =>
{
route.MapHub(ChatHub.HubUrl, options =>
{
options.ApplicationMaxConcurrency = -1;
});
});
services.AddSignalR().AddStackExchangeRedis(Configuration.GetConnectionString("Redis"))
.AddMessagePackProtocol()
.AddNewtonsoftJsonProtocol(options =>
{
options.PayloadSerializerSettings.ContractResolver = new CamelCasePropertyNames
上一篇:ASP.NETCoreSignalR调用中的HttpContext和响应头怎样处理?
下一篇:ASP.NETCoreSignalRIHubContext<>.Clients.All.SendAsync超过5分钟等待