PHP самый быстрый способ чтения ответа сервера - PullRequest
6 голосов
/ 20 апреля 2010

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

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

Я нашел этот поток http://bugs.php.net/bug.php?id=32806, который довольно хорошо объясняет проблему, но он читает файл, а не ответ сервера, поэтому fread может быть немного сложнее, так как я могу получить часть следующеголиния и дополнительные вещи, которые я не хочу.

Итак, мой вопрос: каков наилучший / быстрый способ считывания ответа с сервера в качестве альтернативы fgets?

Ответы [ 2 ]

1 голос
/ 28 апреля 2010

file_get_contents (или stream_get_contents, если у вас есть поток) должен быть самым быстрым способом чтения ответа сервера. Что ж, это самый быстрый способ извлечения данных, но часто это самый расточительный способ, если смотреть на использование памяти, поскольку он считывает весь файл одновременно в память, а fgets не должен хранить в памяти более одной строки. 1001 *

Вы также используете fread, который быстрее, чем fgets, и который читает файл кусками определенного размера, который вы можете определить.

Если вы также полагаетесь на чтение данных, вы можете использовать file (), который будет медленнее, чем file_get_contents, но который даст вам массив со строками файла.

Чтобы дать вам лучший ответ - как уже упоминалось выше, - нам нужна дополнительная информация.

0 голосов
/ 20 апреля 2010

Не достаточно информации здесь.

Предположительно, вы имеете в виду, что где-то запускаете PHP, который вызывает fgets для считывания данных из чего-то еще, но что это такое? Вы намекаете, что это не файл - так что же это? Местная программа? труба? сетевой сокет? веб-страница? ... что-то другое?

Можете ли вы читать с него быстрее, используя другой инструмент? Что вы пробовали? На какой операционной системе вы работаете? У вас есть доступ к оболочке для запуска Netcat или аналогичный?

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

Не зная намного больше о проблеме, невозможно предложить решение.

С

...