Настройка простого веб-приложения 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()
).
Это нормально? Как я могу улучшить производительность этого простого приложения?
Так медленно ли это при запуске, или это медленно, когда вы отправляете запрос на сервер? Как выглядит ваш код концентратора? –
Мне кажется, что вы не включили веб-сайты на Azure. SignalR пытается запустить соединение с использованием транспорта websockets, и когда это не удается, он пытается использовать serverSentEvents как резерв (и если это не работает, он пытается longPolling). Вы можете подтвердить это, открыв инструменты отладчика и проверив запросы SignalR. – Pawel
@Pawel, Вы абсолютно правы! Он использовал longPolling. Проблема устранена путем включения WebSocket на Azure и использования HTTPS для доступа. Спасибо! – Bolu