Как бороться с потоковой передачей данных в PHP?

StackOverflow https://stackoverflow.com/questions/1214016

  •  06-07-2019
  •  | 
  •  

Вопрос

Существует семейство методов ( birddog, shadow и follow ) в Twitter API, который открывает (в основном) постоянное соединение и позволяет вам следить за многими пользователями. Я запустил пример кода подключения с помощью cURL в bash, и он прекрасно работает: когда указанный пользователем пользователь пишет твит, я получаю поток XML в своей консоли.

У меня вопрос: как я могу получить доступ к данным с помощью PHP, которые не возвращаются как прямой вызов функции, но передаются в потоковом режиме? Эти данные поступают время от времени и непредсказуемо, и это не то, что я когда-либо имел дело с, и я не знаю, с чего начать искать ответы. Любые советы и описания библиотек или подводных камней будут оценены.

Это было полезно?

Решение

fopen и fgets

<?php
$sock = fopen('http://domain.tld/path/to/file', 'r');
$data = null;
while(($data = fgets($sock)) == TRUE)
{
    echo $data;
}
fclose($sock);

Это ни в коем случае не отличный (или даже хороший) код, но он должен обеспечивать необходимую вам функциональность. Вам нужно будет добавить обработку ошибок и анализ данных между прочим.

Другие советы

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

Я бы посоветовал вам взглянуть на решение AJAX, которое выполняет вызов сценария, который просто хранит очередь сообщений. Хотя я не уверен, как именно API Twitter работает, поэтому я не уверен, можно ли запустить скрипт при запросе на получение всех твитов, или вам нужно, чтобы какой-то демон добавлял твиты в очередь что PHP может читать и передавать обратно через ваш AJAX-вызов.

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

http://code.google.com/p/phirehose/

Я бы посоветовал изучить использование AJAX. Я не PHP-разработчик, но я думаю, что вы можете подключить вызов AJAX к API и обновить свою веб-страницу.

Phirehose, безусловно, путь:

http://code.google.com/p/phirehose/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top