2016-09-02 3 views
1

Настройка простого веб-приложения SignalR Chat с использованием Microsoft tutorial code.Медленный запуск для установки соединения SignalR

!--SignalR script to update the chat page and send messages.--> 
<script> 
    $(function() { 
     // Reference the auto-generated proxy for the hub. 
     var chat = $.connection.chatHub; 
     // Create a function that the hub can call back to display messages. 
     chat.client.addNewMessageToPage = function (name, message) { 
      // Add the message to the page. 
      $('#discussion').append('<li><strong>' + htmlEncode(name) 
       + '</strong>: ' + htmlEncode(message) + '</li>'); 
     }; 
     // Get the user name and store it to prepend to messages. 
     $('#displayname').val(prompt('Enter your name:', '')); 
     // Set initial focus to message input box. 
     $('#message').focus(); 
     // Start the connection. 
     $.connection.hub.start().done(function() { 
      $('#sendmessage').click(function() { 
       // Call the Send method on the hub. 
       chat.server.send($('#displayname').val(), $('#message').val()); 
       // Clear text box and reset focus for next comment. 
       $('#message').val('').focus(); 
      }); 
     }); 
    }); 

Он работает нормально при отладке локально, я могу отправить сообщение сразу после ввода имени пользователя. Но при развертывании на Azure, после ввода имени пользователя, я должен ждать, как 5 секунд, прежде чем я могу отправить новое сообщение (без ответа нажать кнопку «Отправить»), но после этого первого сообщения для всех следующих сообщений я могу отправить мгновенно.

Для меня это похоже на медленное при настройке начального соединения ($.connection.hub.start()).

Это нормально? Как я могу улучшить производительность этого простого приложения?

+0

Так медленно ли это при запуске, или это медленно, когда вы отправляете запрос на сервер? Как выглядит ваш код концентратора? –

+2

Мне кажется, что вы не включили веб-сайты на Azure. SignalR пытается запустить соединение с использованием транспорта websockets, и когда это не удается, он пытается использовать serverSentEvents как резерв (и если это не работает, он пытается longPolling). Вы можете подтвердить это, открыв инструменты отладчика и проверив запросы SignalR. – Pawel

+0

@Pawel, Вы абсолютно правы! Он использовал longPolling. Проблема устранена путем включения WebSocket на Azure и использования HTTPS для доступа. Спасибо! – Bolu

ответ

3

По умолчанию веб-интерфейсы не включены на Azure, и по умолчанию клиент пытается использовать разные транспорты, начиная с web-сокетов. Если websockets не работает, он вернется к serverSentEvents и, наконец, к longPolling. Это требует времени. Убедитесь, что вы включили веб-узлы на Azure или указали, что хотите использовать только серверыSentEvents и longPolling.

+0

Не могли бы вы взглянуть на мои последующие вопросы: [SignalR Azure Cloud Service с Service Bus] (http://stackoverflow.com/questions/39345867/signalr-azure-cloud-service-with-service-bus)? – Bolu