0

我目前正在 MySQL 中保存一些 Twitter 数据。我的主机只允许我每小时运行一次 cron 作业,所以为了半模拟实时结果,我复制了同一个文件 6 次,每 10 分钟运行一次(主机允许你控制每小时的偏移量)。这很愚蠢,我想。

是否有一些我可以了解的机制可以按我的方式推送数据?欢迎任何想法或建议。

(我已经避免只用每个页面视图查询他们的服务器;我知道的足够多,知道这是不好的做法)

4

5 回答 5

1

如何通过在客户端(家庭系统)添加到 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
于 2009-06-24T02:57:42.810 回答
1

您可以明智地提取从您的请求触发的 Twitter 数据。这有点深奥,但本质上您将锁定数据存储在一个表中,以确保每 N 分钟(或在您需要时)只有一个请求从 twitter 轮询数据。例子:

  1. 请求检查以查看是否需要检索新的 Twitter 数据
  2. 检查锁定表以查看是否有另一个请求已经在与 twitter 通信
  3. 将记录添加到锁定表。确保在通过数据库约束设置为唯一的列中指定数据。这将防止您制作两把锁。
  4. 与 twitter 交谈,保存 twitter 数据。
  5. 删除锁定记录

为了速度,请确保您的锁表在内存中或使用 memcached 代替。当然,如果您可以使用 memcached,那么您可能无论如何都可以完全控制 cron。:)

于 2009-06-24T04:02:30.793 回答
0

一个相对简单的解决方案是在另一台计算机上运行 cron 作业。它会向 Twitter 发出请求,然后执行一个 HTTP POST 到服务器上的指定页面(例如http://foo.com/latestTwitterData)。当然,您需要进行身份验证以防止向您发送随机垃圾。

我不知道这对你的情况是否合理。

于 2009-06-24T02:58:13.277 回答
-1

每秒左右运行代码非常容易。

// pseudocode
while(1) {
    // do request

    // sleep 1 second
    sleep(1);
}
于 2009-06-24T02:59:57.330 回答
-1

为什么不在你的程序中放一个while循环,然后在你需要更新多长时间之间休眠N秒?然后你可以在 59 分 30 秒后死亡。

或者,要优化多个文件的复制,您可以在单个 cron 行中添加对程序的多个调用。就像是:

./prog.pl; sleep 60; ./prog.pl

于 2009-06-24T03:01:55.810 回答