如何防止服务器阻塞php

时间:2010-12-14 14:15:04

标签: php facebook twitter real-time daemon

我目前正在开发一个php守护进程,用于连接和检索来自facebook和twitter等社交网络的数据。这个脚本已经可以使用,但我对它有些担忧。

可以创建脚本必须处理的无限数量的帐户,并且(现在)它每5分钟运行一次,以创建“近乎”的实时体验。所以我担心的是,当创建5000个帐户时,必须对其进行监控。脚本速度变慢,运行时间可能超过5分钟。有没有办法解决这个问题?更好的是,有没有什么好的方法(使用php,可能使用javascript)来创建更好的“近乎”实时体验?

任何建议都会很棒!

提前致谢

3 个答案:

答案 0 :(得分:2)

一种选择是生成多个守护进程并在它们之间共享任务。也许有单个中央作业队列并且让守护进程消耗掉。它实际上是一个服务器端问题,Javascript与这些任务关系不大,只要它不是服务器端的JS。

如果受监控主题的数量达到数千个,那么PHP实际上并不是一个可行的选择,因为它既不是固有的多线程也不是同步功能。在大规模监控方案中,运行J2EE,.NET或自定义多线程应用程序的专用服务器是必须的。

答案 1 :(得分:1)

对于大多数网站,您可以检索包含所有数据的流(实时)。例如:

1。微博

  

site streams允许服务,   例如网站或移动推送   服务,以接收实时更新   对于没有的大量用户   管理REST的任何麻烦   API费率限制

2。实

  

Graph API支持real-time   更新以启用您的应用程序   使用Facebook订阅更改   来自Facebook的数据。

使用这些流时,您可以实时处理流,而不必进行任何(几乎没有)轮询。

P.S:我绝对会在node.js中编写代码。

答案 2 :(得分:0)

将最大执行时间设置为零并包含它 将您的脚本包含在一个inite循环中:

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

但是,您应该包含一些方法来优雅地结束该过程。 一些流行的方法是检查是否设置了env var或是否存在特定文件。

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

另一种方法是在脚本运行时(在文件中,在sql数据库中......)设置一个标志,并在完成后删除它。 这样,您可以检查脚本的另一个实例是否仍在运行。