Как предотвратить блокировку сервера php - PullRequest
0 голосов
/ 14 декабря 2010

В настоящее время я занимаюсь разработкой php-демона для подключения и получения данных из социальных сетей, таких как Facebook и Twitter. Этот скрипт уже работает, но у меня есть некоторые опасения по этому поводу.

Можно создать бесконечное количество учетных записей, которые должен обрабатывать скрипт, и (прямо сейчас) он запускается каждые 5 минут, чтобы создать «почти» опыт в реальном времени. Поэтому я обеспокоен тем, что, скажем, 5000 учетных записей, были созданы и должны контролироваться. Сценарий замедляется и, возможно, будет работать дольше, чем 5-минутный интервал. Есть ли способ обойти эту проблему? И еще лучше, есть ли какой-нибудь хороший способ (с php, возможно с javascript), чтобы создать лучший опыт «почти» в реальном времени?

Любой совет будет отличным!

Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 14 декабря 2010

Один из вариантов - создание нескольких демонов и распределение обязанностей между ними. Возможно, имейте единственную центральную очередь заданий, и демоны потребляют это. Это действительно проблема на стороне сервера, и Javascript имеет мало общего с такими задачами, поскольку это не JS на стороне сервера.

Если число отслеживаемых объектов исчисляется тысячами, PHP на самом деле не является жизнеспособным выбором, поскольку он не является многопоточным и не имеет функций синхронизации. В сценариях массового мониторинга выделенный сервер под управлением J2EE, .NET или пользовательское многопоточное приложение является обязательным условием.

1 голос
/ 14 декабря 2010

для большинства сайтов вы можете получить поток, содержащий все эти данные (в режиме реального времени).Например:

1.twitter

потоки сайтов позволяют таким службам, как веб-сайты или мобильные push-сервисы, получать обновления в реальном времени для большого числа пользователей без каких-либо хлопот по управлению RESTОграничения скорости API

2.Facebook

Graph API поддерживает обновления в режиме реального времени, позволяющие вашему приложению с помощью Facebook подписываться на изменения данных Facebook.

При использованииэти потоки вы можете обрабатывать потоки в режиме реального времени и не должны делать никаких (почти никаких) опросов.

PS: я бы определенно кодировал это в node.js.

0 голосов
/ 14 декабря 2010

установить максимальное время выполнения на ноль и включить его заключите ваш скрипт в цикл инициализации:

set_time_limit(0);
while(true){
/your code
}

Однако вы должны предусмотреть какой-нибудь способ завершить процесс изящно. Некоторые популярные способы сделать это - проверить, была ли задана переменная env или существует ли конкретный файл.

set_time_limit(0);
while(true){
/your code
if(file_exist(KILL_SWITCH_FILE))break;
}

Другим подходом было бы установить флаг, когда (в файле, в базе данных sql, ...) ваш скрипт выполняется, и удалить его, когда вы закончите. Таким образом, вы можете проверить, работает ли еще один экземпляр вашего скрипта.

...