Есть ли в Perl итераторы HTTP-соединений? - PullRequest
0 голосов
/ 08 апреля 2011

Я пытаюсь проанализировать результаты запросов по HTTP, которые могут возвращать до миллионов строк - где каждая строка должна быть проанализирована.В идеале я хотел бы прочитать строку за раз из соединения и проанализировать ее по ходу работы - так что в основном это итератор FileHandle-esque, но все существующие библиотеки HTTP, кажется, извлекают все содержимое одновременно, хотя можно а) сохранить вфайл, или б) обрабатывать куски, используя код ref.A не является идеальным, так как это двухпроходное решение (файл должен быть прочитан построчно после передачи данных, и он займет память, возможно, излишне).B не идеален, поскольку хотел бы иметь возможность возвращать каждую строку, а не обрабатывать ее в ссылке на код, и, кроме того, порция не является строкой, так что решение LWP не извлекает выгоду из восстановления строки LWP.Я знаю, что есть неблокирующие решения (использующие AnyEvent и Coro), но они, похоже, больше заинтересованы в неблокировании, чем в построчном преобразовании.Кто-нибудь может указать мне правильное направление, или я лаю не на том дереве?

Ответы [ 2 ]

0 голосов
/ 08 апреля 2011

Обратный вызов позволяет вам делать все, что вы хотите. Вы можете сделать это так, чтобы вы буферизовали входные данные по мере их получения и читали строки из буфера. Perl позволяет открывать файловые дескрипторы практически на всем (используя tie), включая строки (с open). Все остальное, что вы можете найти, в конечном итоге получит кусок и все равно превратит его в строки.

0 голосов
/ 08 апреля 2011

Посмотрите на принятый ответ на Какой самый простой способ в чистом Perl для потоковой передачи с другого ресурса HTTP? Я сам не использовал HTTP :: Lite, но, похоже, он поддерживает обратный вызовобработка полученных данных, так что это должно работать на вас.

...