Как бороться с потоковой передачей данных в PHP? - PullRequest
7 голосов
/ 31 июля 2009

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

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

Ответы [ 5 ]

6 голосов
/ 31 июля 2009

fopen и fgets

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

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

2 голосов
/ 22 декабря 2009

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

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

2 голосов
/ 31 июля 2009

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

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

0 голосов
/ 22 февраля 2010

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

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

0 голосов
/ 31 июля 2009

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

...