короткий опрос по сравнению с веб-сокетами для коротких запросов

-2

Таким образом, у нас есть сервер back-сервера Django, который взаимодействует с большим количеством сторонних серверов. Эти сторонние серверы используют соединения сокетов для связи, а не HTTP. Каждый запрос пользователя к нашему сервису будет связываться (через сокет) с одним из многих возможных сторонних серверов. Каждый сторонний сервер может занять от 1 до 20 секунд, хотя обычно он составляет около 1-5 секунд. Конечно, когда пользователь отправляется на нашу веб-страницу для запроса одного из этих сторонних сервисов, мы хотим как можно быстрее ответить на нашего пользователя, то есть не блокировать на нашем сервере ожидания ответа. Когда ответит сторонний сервер, мы хотим вернуть ответ обратно в браузер пользователя.

Конечно, это обычная проблема. Но ключевым моментом здесь является то, что мы будем отправлять запросы на наш веб-сервер каждые 5 секунд или около того (например, используя JavaScript/AJAX на наших веб-страницах). Я понимаю, что если бы мы смогли создать соединение с веб-сайтом для ответа и оставить его открытым, и/или если наши запросы были действительно длительными (скажем,> 30 секунд), то websockets были бы хорошим способом для push-сервера. Тем не менее, по разным причинам мы не можем этого сделать, поэтому нам нужно будет установить новое подключение к веб-разъему каждый запрос. Мне кажется, что если нам нужно пройти через весь процесс каждые 5 секунд, открыв веб-раскладку, настроив websocket, чтобы соответствовать правильному стороннему сервисному соединению, отправив команду вниз, проксируя эту команду правильной сторонней службе, получить ответ, прокси, соответствующий правильному веб-расписанию, и отправить ответ обратно в браузер, а затем сделать это снова через 5 секунд, действительно ли это лучше, чем просто делать короткие короткие опросы? Наш короткий подход к опросу состоял бы в том, чтобы использовать основной вызов AJAX для отправки запроса вниз, а затем вернуть успех браузеру. Бэкэнд будет прокси-сервером для надлежащего стороннего сервиса, и когда результаты придут, он сохранит эти результаты в таблице MYSQL. Наш AJAX просто посылает команду опроса каждую секунду или две (возможно, с отсрочкой, например 1,1,2,4,6,10,... секунды), пока не будет получен ответ или пока не произойдет тайм-аут. Реализация для этого, безусловно, будет проще и будет в значительной степени гарантирована. В подавляющем большинстве случаев мы выдавали команду "один раз каждые 5 секунд" и получали ответ после первой или второй попытки опроса. Если мы используем веб-интерфейсы, для попытки правильной настройки прокси-сервера бэкэнд для использования надлежащего бэкэнд-сервиса потребуется попытка соединения плюс одна или две команды записи сокетов, а затем мы получим ответ, и сокет закроется, и нам придется сделайте это снова через 5 секунд.

Таким образом, не будет ли коротко-опроса работать нормально и, возможно, лучше в этой ситуации?

  • 0
    Какие данные вы получаете со сторонних серверов? Распространено ли оно среди пользователей? Это уникально для каждого запроса? Не могли бы вы привести пример (например, «сторонние серверы предоставляют курсы обмена иностранной валюты»)
Теги:
websocket
polling

1 ответ

0

Если вы просто собираетесь создать новое соединение для каждого отдельного запроса, то для использования веб-узла больше, чем HTTP-запроса.

Каждое соединение webSocket начинается с HTTP-запроса/ответа, чтобы получить инициализацию webSocket, а затем вы хотите отправить больше пакетов - это больше, чем только HTTP-запрос/ответ.

Реальная экономия здесь будет заключаться в том, чтобы решить любые проблемы, которые заставляют вас думать, что вам нужно создать новое соединение с WebSocket для каждого запроса. Вероятно, это разрешимо. Затем вы создаете одно соединение с WebSocket и просто отправляете сообщения в оба способа отправки запросов и возвращаете ответы, и это определенно будет более эффективным, чем HTTP-опрос.

Чтобы действительно повысить эффективность, чем http, вы полностью прекращаете опрос от клиента. Таким образом, вместо того, чтобы клиент говорил "у вас есть что-то новое для меня" каждые 5 секунд, клиент просто устанавливает соединение с WebSocket, инструктирует сервер о том, о чем он хочет быть уведомленным, сервер затем делает все, что нужно сделать для опроса и всякий раз, когда есть что-то, что он думает, что клиент хочет, он просто отправляет его клиенту, не дожидаясь интервала опроса. Клиент получает данные быстрее (ему не нужно ждать следующего интервала опроса), нет пустых запросов/ответов на опрос, поэтому использование сервера и использование полосы пропускания лучше.

  • 0
    @Marc - это отвечает на ваш вопрос? Если это так, вы можете указать это сообществу, нажав зеленую галочку слева от ответа, и это также принесет вам несколько очков репутации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню