Я получаю текущие данные из веб-канала другой компании. Это простая выборка XML-файла по HTTP. Они не предоставили мне много документации - только URL.

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

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

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

(Бонусные баллы за независимое от платформы решение на основе Python, но я возьму то, что смогу получить.)

1
Oddthinking 8 Сен 2010 в 18:35

4 ответа

Лучший ответ

То, что вы хотите, это потоковое HTTP; прочитайте эту страницу. Comet - это то, что обычно называют этой технологией. Одной из реализаций является Ajax Push Engine (APE); На странице, которую я только что дал вам, есть несколько других.

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

В качестве альтернативы вы можете использовать периодическое обновление («опрос»), и преимущества этого метода заключаются в следующем: вам не нужно дополнительное программное обеспечение на сервере, и это можно сделать без участия сервера, с которым вы опрашиваете (это невозможно используйте Comet, если запрашиваемый сервер не установит его).

Дополнительную информацию и рекомендации по сокращению использования полосы пропускания при опросе см. На этой странице. Некоторые из них потребуют определенных усилий с сервера, с которого вы опрашиваете.

1
NullUserException 8 Сен 2010 в 16:02

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

Это сказало ... Я вообще рекомендую против технологий толчка в сети, поскольку они истощают ресурсы сервера намного быстрее, чем парадигма запроса / ответа.

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

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

1
Randolpho 8 Сен 2010 в 14:42

Чтобы избежать ненужной загрузки, я бы проверил etags и Last-updated заголовки, как описано здесь

http://diveintopython3.ep.io/http-web-services.html

1
Bill the Lizard 8 Мар 2012 в 13:22

Я не знаю ни одного метода проверки, поддерживает ли веб-сервер технологию push.
Вам следует спросить эту компанию, можно ли использовать Comet подход, чтобы избежать опроса ,

Для решения на базе Python Comet посмотрите здесь.

1
Community 23 Май 2017 в 10:30