Как я могу эффективно выполнять одновременные сетевые запросы?

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

Мне нужно регулярно запускать тысячи небольших сетевых запросов каждые 10 минут или около того, и я пытаюсь найти наилучшее решение для асинхронного запуска этих заданий без конфликта или удвоения.

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

Для перезаписи я просмотрел php-resque и pcntl_fork в качестве решений для параллельного выполнения заданий, тем самым значительно ускоряя выполнение. Я также рассмотрел запуск нескольких неблокирующих запросов сокетов из PHP, но до сих пор предпочитал простоту изолированных заданий.

1
nl ja de
Нашел эту полезную статью: stackoverflow.com/a/14201579/147731
добавлено автор Ryall, источник

2 ответы

PHP не может выполнять потоки в традиционном смысле, поэтому то, что вы пытаетесь сделать, на самом деле не так, как вы думаете. Вы посмотрели на лучшее решение (возможно) в pcntl_fork , но это все равно не будет действительно асинхронным. Рассматривали ли вы использование cron для этого?

1
добавлено
В настоящее время я использую cron для выполнения команды PHP, которая затем выполняет итерацию через базу данных и работает над каждой записью.
добавлено автор Ryall, источник
Будет ли pcntl_fork моим лучшим вариантом?
добавлено автор Ryall, источник
Я рассматривал это (написав небольшой помощник на C ++/Java), но поскольку у меня есть ограниченное время на этой работе, я бы предпочел оставить его на PHP, если это возможно.
добавлено автор Ryall, источник
Это нормально, если я могу сразу открыть сразу несколько запросов, не беспокоясь о том, чтобы опросить неблокирующие потоки, тогда я счастлив. Спасибо, Мэдни!
добавлено автор Ryall, источник
На самом деле, я все равно могу просто пойти с неблокирующими потоками. Полагаю, это будет иметь гораздо меньший объем памяти, чем все время.
добавлено автор Ryall, источник
Это зависит от деталей того, что вы пытаетесь сделать. Вы также можете делегировать сетевые операции другому процессу с помощью системного вызова, например, позволить Perl обрабатывать сетевые операционные системы.
добавлено автор Madbreaks, источник
Тогда да, посмотрите pcntl_fork с пониманием, что это не действительно делает async.
добавлено автор Madbreaks, источник
PHP может создавать темы ... php.net/pthreads ...
добавлено автор Joe Watkins, источник

http://php.net/pthreads

http://github.com/krakjoe/pthreads

Примеры в github ... и включены в дистрибутив, используют код в github, он содержит исправления, еще не выпущенные.

1
добавлено
Очень интересно, это решает все мои проблемы. Читая документацию, он упоминает, что библиотека все еще экспериментальна. Я предполагаю, что вы являетесь автором, и насколько стабильны бы вы сказать, что это сейчас?
добавлено автор Ryall, источник
Кроме того, как мне установить код в Github? Раньше я никогда не делал компиляции модулей PHP.
добавлено автор Ryall, источник
Спасибо, Джо, я в настоящее время использую метод Multiprocessing, но я бы предпочел потоки, поэтому я отдам его. :)
добавлено автор Ryall, источник
pthreads.org/Building - это должно заставить вас начать работу. Есть несколько снимков окон, иногда на pthreads.org/snapshots . И windows dlls on pecl для выпусков windows.php.net/downloads/pecl/releases/ pthreads ... это замечательно стабильно, все, что я говорю, предвзято, застрял в моем лучшем совете :)
добавлено автор Joe Watkins, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp