我目前正在开发一个php守护进程,用于连接和检索来自facebook和twitter等社交网络的数据。这个脚本已经可以使用,但我对它有些担忧。
可以创建脚本必须处理的无限数量的帐户,并且(现在)它每5分钟运行一次,以创建“近乎”的实时体验。所以我担心的是,当创建5000个帐户时,必须对其进行监控。脚本速度变慢,运行时间可能超过5分钟。有没有办法解决这个问题?更好的是,有没有什么好的方法(使用php,可能使用javascript)来创建更好的“近乎”实时体验?
任何建议都会很棒!
提前致谢
答案 0 :(得分:2)
一种选择是生成多个守护进程并在它们之间共享任务。也许有单个中央作业队列并且让守护进程消耗掉。它实际上是一个服务器端问题,Javascript与这些任务关系不大,只要它不是服务器端的JS。
如果受监控主题的数量达到数千个,那么PHP实际上并不是一个可行的选择,因为它既不是固有的多线程也不是同步功能。在大规模监控方案中,运行J2EE,.NET或自定义多线程应用程序的专用服务器是必须的。
答案 1 :(得分:1)
对于大多数网站,您可以检索包含所有数据的流(实时)。例如:
site streams允许服务, 例如网站或移动推送 服务,以接收实时更新 对于没有的大量用户 管理REST的任何麻烦 API费率限制
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数据库中......)设置一个标志,并在完成后删除它。 这样,您可以检查脚本的另一个实例是否仍在运行。