2010-12-14 3 views
0

У меня есть PHP-скрипт, который открывает сокет-соединение (используя fsockopen) и занимает около 15 секунд для завершения/возврата результата в браузер. В среднем, если браузер отправляет второй запрос, он сериализуется. Это дает плохой пользовательский опыт, потому что если пользователь нажимает 3 раза, то третий запрос, который отправляется после 30 секунд, получает тот ответ, который получает первые два запроса от браузера.PHP одновременных TCP-соединений из одного и того же браузера

У меня нет сеанса в моем скрипте, но я попытался поставить session_write_close() в начале моего скрипта, который не помог.

session.auto_start Также в php.ini = 0.

Любые идеи о том, как сделать клиентские запросы из одного браузера параллельно ??

Благодаря Gary

+0

Речь идет о том, как вы инициируете подключения от клиента, а не то, что находится на вашем сервере. Это вопрос JavaScript/websockets, а не PHP. –

+0

Вы использовали stream_context_create(). Измените свой вопрос и добавьте часть кода, чтобы получить больше информации о проблеме. – Manu

ответ

1

1) Скачать и установить Firefox

2) Скачайте и установите Firebug

3) Добавить sleep(10) в ваш PHP скрипт, так что он делает паузу в течение нескольких секунд, прежде чем вернуться его ответ

4) Откройте свою веб-страницу и посмотрите исходящие соединения с Firebug. Вы должны увидеть несколько открытых и еще не ответивших. Они должны вернуться примерно в одно и то же время, когда каждый заканчивает 10-секундную задержку.

Если вы не видите одновременное открытие нескольких соединений и возвращаетесь примерно в одно и то же время, вам необходимо посмотреть код вашего внешнего интерфейса. Запросы AJAX являются асинхронными и могут выполняться параллельно. Если вы видите, что они запускаются серийно, то это означает, что вам нужно исправить код JavaScript, а не что-либо на сервере.

Parallel asynchronous Ajax requests using jQuery

+0

Я проанализировал пакеты wirehark и посмотрю, что следующий запрос удаляется из браузера только после получения ответа от предыдущего запроса. Таким образом, это похоже на проблему с клиентом. Спасибо всем за ответы. Я буду держать вас в курсе моих результатов. – Gary

0

Вы должны, если это вообще возможно установить (* Никс) redis.

Для установки просто сделать простой

make 

С lpush/brpop вы можете обрабатывать этот материал асинхронно и поддерживать порядок в неприкосновенности. Если вы создаете пару рабочих потоков, вы можете обрабатывать одновременно несколько запросов. predis клиентская библиотека довольно прочная

Смежные вопросы