Сбой соединения SignalR в браузере Iphone Safari сводится к минимуму.Как заставить его оставаться на связи?или Как восстановить соединение, когда Tab становится активным - PullRequest
0 голосов
/ 20 мая 2019

Я использую Signal-R Core, простую страницу чата. Я вошел в систему с разными клиентами, такими как браузер на ноутбуке, мобильный браузер на Android и IOS,

Я мог бы отправить сообщение всем клиентам, но когда мобильный браузер (только IOS) сворачивается, соединение Signal-R отключено,

Я пытался реализовать логику для повторного подключения. Идея состоит в том, чтобы установить флаг для вызываемого connection.close (), а затем запустить соединение, вызвав connection.start () для Window.focus (). Функция Window.focus () работает правильно.

Это работает как 1 после 1 раза, когда браузер свернут, только в браузере iPhone. Сценарий: изначально подключен, сообщение успешно отправлено. Теперь браузер свернут, а затем снова открыт и отправка сообщения от клиента iPhone, теперь происходит сбой. Затем снова свернул и снова открыл браузер, отправив с клиента iPhone, теперь сообщение успешно отправлено.

Пробовал несколько раз. работает так же.


var flagConnection = true;

var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
connection.on("BroadcastMessage", function ( user, message) {
    var encodedMsg =  user + ": " + message;
    var li = document.createElement("li");
    li.textContent = encodedMsg;
    $("#divChatMessages").append(li);
});

connection.start();

connection.onclose(function(change) {

    if(connection.connectionState == 0)
        flagConnection = false;
    else
        flagConnection = true;
});


window.addEventListener("focus", function(event) 
    { 
        if(flagConnection == false){
            connection.start();
            flagConnection = true;
        }
    });


...