Нажим сервера при каждом вызове функции: Ajax или WebSockets

В настоящее время я работаю над панелью состояния в Tornado (python). Мне нужно, чтобы веб-страница динамически обновлялась (путем повторного рендеринга шаблона) всякий раз, когда вызывается внешняя функция. Мне было интересно, каков наиболее эффективный способ сделать это? и есть ли у них какие-либо учебники для чего-то подобного.

1 ответ

Решение

Если вы хотите, чтобы фактическое продвижение сервера происходило, вам понадобятся события webSocket или отправленные сервером. Поскольку отправленные сервером события являются очень новыми (и не поддерживаются во многих браузерах), основной опцией для фактической отправки на сервер является соединение webSocket.

В архитектуре webSocket клиент подключается к серверу, а затем остается подключенным. Это позволяет серверу отправлять данные клиенту через это соединение в любое время.

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


Нет никакого способа использовать Ajax для фактической загрузки сервера. Ajax иногда используется для имитации отправленных сервером событий с помощью так называемого длинного опроса. В этом сценарии клиент выполняет вызов Ajax, а сервер просто некоторое время зависает на запросе Ajax, а не сразу возвращает ответ. Если в течение этого времени происходит событие на стороне сервера, то сервер может взять соединение, ожидающее ответа, и отправить ответ. Клиент получит ответ, обработает его и затем сделает еще один Ajax-вызов. При длительном опросе, если какое-то действие на стороне сервера не происходит через некоторое время, время ожидания Ajax истекает, и клиент должен инициировать новое соединение.

Вся последовательность соединений с длительным опросом, как правило, менее эффективна, чем соединение webSocket. Таким образом, если основная проблема, которую вы пытаетесь решить, это пересылка на сервер, то соединение с webSocket, вероятно, будет наиболее эффективным и широко поддерживаемым способом сделать это.

Вот несколько похожих вопросов и ответов, в которых содержится еще одно обсуждение: websocket vs rest API для данных в реальном времени? и Ajax против Socket.io.

Другие вопросы по тегам