SignalR "Ошибка при рукопожатии WebSocket" иногда - PullRequest
1 голос
/ 09 марта 2020

В моем приложении возникают проблемы с принятием рукопожатия примерно половину времени в моей производственной среде. На моем локальном компьютере и в моей промежуточной среде, которая аналогична рабочей, она работает каждый раз.

Это приложение. Net Core 2.1, использующее как pnet -signalr / 1.1.4

Я не настраиваю 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");
});

enter image description here

Похоже, что он пытается согласовать веб-сокет, затем длительный опрос и оба сбоя. Но запросы возвращаются 200

enter image description here

Так как это происходит только иногда, у меня возникают проблемы, решающие проблему. Мое единственное подозрение на данный момент заключается в том, что моя среда находится в AWS за балансом нагрузки, что запросы согласования направляются на разные серверы, которые могут вызвать проблему?

Любая помощь приветствуется.

1 Ответ

2 голосов
/ 09 марта 2020

SignalR требует, чтобы одно соединение всегда обрабатывалось одним и тем же сервером. Типичное решение - настроить балансировщик нагрузки для использования липких сеансов. При включенных прикрепленных сеансах подсистема балансировки нагрузки будет направлять запросы одного и того же пользователя на один и тот же внутренний сервер.

https://docs.microsoft.com/en-us/aspnet/core/signalr/scale?view=aspnetcore-3.1

...