Я ищу «способ пойти» (т. Е. Наиболее эффективный, наиболее используемый, общепринятый способ), когда речь заходит о перегрузке данных с веб-сервера на передний план. В конце приложения у меня будет несколько полей вывода, в которые должны быть записаны данные, например:
Потоки данных будут отличаться друг от друга в конечном приложении. Строки должны быть перезагружены свежими, обновленными данными с сервера.
Я думал об использовании Ajax-запросов для обновления как каждую секунду, но должен быть другой способ сделать это. Запросы Ajax вызовут большой трафик данных. Кроме того, при использовании чата Facebook вам не нужно ждать каждую секунду, чаты принимаются почти мгновенно. Тем не менее, я не вижу никаких запросов на опрос Ajax, когда я использую инструменты разработчика Mozilla Firefox. Это заставило меня подумать, будет ли другой способ сделать это.
Я просмотрел Node.js, но, похоже, это невозможно с моим хостом.
Я слышал, как люди говорили о Ajax Push, это то, что я должен использовать? Если да, можете ли вы дать мне пример использования?
Если нет, что тогда будет, когда нужно иметь несколько потоков данных, которые необходимо перезагрузить за секунду?
Требования – скорость и низкий трафик данных . Поэтому я думаю, что это не будет возможностью постоянно опроса сервера, потому что это создаст огромные накладные расходы.
Я не думаю, что это имеет значение, но я использую PHP5.3 в конце и JavaScript с jQuery 1.9.1 в интерфейсе.
Этот вопрос задавался несколько раз, но несколько иначе. Вот несколько ссылок, которые стоит прочитать:
Вкратце : если вы смотрите на создание своего решения с помощью PHP на Apache, то сохранение открытых постоянных соединений (длительный опрос или потоковое HTTP-сообщение) будет очень быстро использовать ресурсы (крайне неэффективно). Таким образом, вам будет лучше использовать размещенное решение (* отказ от ответственности – я работаю для хостинга решения).
Протокол HTTP-Long и потоковое HTTP-потоки – это решения, которые были заменены событиями Server-Sent и WebSockets. Итак, где это возможно (где веб-клиент обеспечивает поддержку), вы должны использовать одно из этих решений, прежде чем вернуться к HTTP-решению. Хорошая веб-технология в реальном времени автоматически справится с этим для вас.
Поскольку ваша диаграмма показывает, что вы подписались на несколько потоков данных, вы также должны рассмотреть решение Publish / Subscribe, которое, естественно, соответствует этому. Опять же, хорошее веб-техническое решение в реальном времени предоставит вам это.
Также см. Руководство по технологиям в реальном времени .
Я думаю, что то, что вы ищете, обычно называется Comet . Этот метод часто использовался для работы:
Обычно данные передаются как JSON, но вы можете выбрать любую кодировку, которую хотите. См. Здесь один пример того, как это сделать. Goosh – еще один пример этой техники, а также Interactive Python Shell . Код для всех доступен.
На стороне PHP вы захотите создать страницу, которая будет отвечать на эти «фоновые» запросы комета JavaScript. Это может быть та же самая страница, что и пользователь, загружающий, но, скажем так, это другое, для удобства объяснения. Таким образом, пользователь загружает index.php
и код комета JavaScript Comet getNewData.php
для получения новых данных.
В вашем getNewData.php
вы захотите дождаться своего события и затем вернуть данные. Вы не хотите использовать опрос для этого, но есть библиотеки PHP, которые позволяют использовать различные стратегии взаимодействия между процессами, чтобы ждать событий, например , см. Этот вопрос . Высокоуровневый псевдокод для вашего getNewData.php
выглядел бы следующим образом: