Предполагается, что мы будем иметь 1000 запросов к API стороннего сайта, которые должны отправляться по крону через равные промежутки времени. Если запрос удовлетворяет условию, то выполняем какой-то код, иначе ничего не делаем. В голове сразу встает картина, как PHP будет последовательно отправлять один запрос, ожидать ответ и только после этого переходить к следующему, тогда как Node.js может отправить один запрос и не дожидаясь ответа перейти к следующему, а ответы получать асинхронно. Я никогда не работал с ноде, подскажите, какой из виновников справится с поставленной задачей быстрее, и какие есть подводные камни. Для справки: данные для задания будут храниться в MySQL.
DevMan: на вашем совете, но пока не могу разобраться... Переписал код под curl_multi, запускаю, вроде бы процесс пошел, но очень долго, я запустил тестовый код из браузера, nginx повис из-за истекшего таймаута, результатов не получил, в логах ошибок нет. Попробовал простейший пример с официального сайта php: php.net/manual/en/function.curl-multi-init.php, тут такая же песня, долго выполняется, хотя там всего две ссылки обрабатываются, висит nginx и никакого результата... Ничего не пойму, как так? Ведь мультикурл должен наоборот сокращать время выполнения скрипта в несколько раз! Полагаю, что цикл выполняет код бесконечно пока его не отрубает апатч, но почему так происходит даже с примером с официальной документации?
DevMan: с помощью класса RollingCurl все работает на ура, а если я сам пытаюсь написать код, или даже пример из официальной документации, то сталкиваюсь с проблемой.... Я выяснил, что у меня всегда curl_multi_select($mh) равно "-1".
Все будет зависить от ответов стороннего АPI.
1. Если АPI будет в состоянии обработать асинхронные запросы быстро (100ms), не ставя их в очередь - то node.js или просто страничка с асинхронными вызовами будут обрабатывать быстрее;
2. Если же API для обработки запроса нужно будет делать серьезные действия (например 500 ms), то экономия будет ничтожна.
P.S. Синхронные вызовы обрабатываются сервером с более высоким приоритетом и априори получают результат раньше асинхронных. И возможно виигрыш с асинхронными не покроет разницы. Так что если увас уже написан скрип то переписывать его нет смысла.
Johnny07: тут не то чтобы "товарищи за PHP", а:
1. пхп имеет возможность выполнять асинхронные запросы
2. пхп вы знаете, а ноду нет.
итого: в данном конкретном случае смысл использовать ноду имеет только, если вы хотите поучиться и получить новый опыт.
DevMan: на сколько мне известно php не умеет асинхронно работать с БД, поэтому в перспективе хочу освоить ноду, ведь лвиная доля работы веб сервисов со стороны сервера это работа с данными.
Johnny07: учить что-то новое всегда интересно и полезно.
php умеет асинхронно работать с БД, при должной сноровке.
но ведь данный вопрос, совсем не об этом )
Новый php7, который выйдет в релиз примерно в ноябре этого года, будет быстрым как nodejs но по затратам оперативки будет проигрывать, но кого это волнует ( да и потестить нужно будет еще раз)
Ну и HHVM некто не отменял использовать пока не появится php7 надеюсь, в седьмой версии добавят just-in-time compilation.
Антон В., пойдет 7.4 вполне нормально и стабильно предсказуемо работает.
С того времени много чего улучшили, массивы сделали быстрыми, вот FFI добавили в 7,4.
Я не перестану любить nodejs, то что люди делают под нагрузками на 2х серверах можно сделать на пол сервере на нодежс.
NodeJS - Внутри движочек от Google V8. Я думаю там на низком уровне все более оптимизировано, чем ранние версии PHP. Benchmark. Более реальный пример. Возможно ответ. Но, догадываюсь что еще быстрее будет GO :)