【发布时间】:2009-06-24 02:51:50
【问题描述】:
我目前正在 MySQL 中保存一些 Twitter 数据。我的主机只允许我每小时运行一次 cron 作业,所以为了半模拟实时结果,我复制了同一个文件 6 次,每 10 分钟运行一次(主机允许你控制每小时的偏移量)。我认为这很愚蠢。
是否有一些我可以了解的机制可以按我的方式推送数据?欢迎任何想法或建议。
(我已经避免只在每次页面浏览时查询他们的服务器;我知道的足够多,知道这是不好的做法)
【问题讨论】:
我目前正在 MySQL 中保存一些 Twitter 数据。我的主机只允许我每小时运行一次 cron 作业,所以为了半模拟实时结果,我复制了同一个文件 6 次,每 10 分钟运行一次(主机允许你控制每小时的偏移量)。我认为这很愚蠢。
是否有一些我可以了解的机制可以按我的方式推送数据?欢迎任何想法或建议。
(我已经避免只在每次页面浏览时查询他们的服务器;我知道的足够多,知道这是不好的做法)
【问题讨论】:
如何通过添加到客户端(家庭系统)的 cron 来访问托管在服务器上的网页(进而执行程序):
/usr/bin/curl http://yourserver.com/twitter
否则,您可以每小时运行以下 bash 脚本:
#!/bin/bash
for (( i = 0; i < 6; i += 1 )); do
/usr/bin/curl 'http://yourserver.com/twitter'
sleep 600
done
【讨论】:
您可以明智地提取从您的请求触发的 Twitter 数据。这有点深奥,但本质上您将锁定数据存储在一个表中,以确保每 N 分钟(或在您需要时)只有一个请求从 twitter 轮询数据。示例:
为了速度,请确保您的锁表在内存中,或者改用 memcached。当然,如果您可以使用 memcached,那么您可能无论如何都可以完全控制 cron。 :)
【讨论】:
一个相对简单的解决方案是在另一台计算机上运行一个 cron 作业。它会向 Twitter 发出请求,然后执行 HTTP POST 到服务器上的指定页面(例如http://foo.com/latestTwitterData)。当然,您需要进行身份验证以防止向您发送随机垃圾。
我不知道这对你的情况是否合理。
【讨论】:
每秒运行一次代码非常容易。
// pseudocode
while(1) {
// do request
// sleep 1 second
sleep(1);
}
【讨论】:
为什么不在你的程序中加入一个while循环,然后在你需要更新多长时间之间休眠N秒?然后你可以在 59 分 30 秒后死亡。
或者,为了优化多个文件的复制,您可以在单个 cron 行中添加对程序的多个调用。比如:
./prog.pl; sleep 60; ./prog.pl
【讨论】: