【问题标题】:What's the fastest way to check if a web site is up in Perl or C?检查网站是否使用 Perl 或 C 的最快方法是什么?
【发布时间】:2010-11-05 12:26:43
【问题描述】:

我正在尝试检查网站是否已启动并正在运行。我目前正在使用 Perl 中的 UserAgent 库执行此操作,超时时间为 1。但是,它对我来说仍然太慢了。

我每五分钟从 cron 调用一次脚本。有很多链接要检查,脚本需要五分钟以上才能完成执行。所以,我需要一种更有效的方法来做到这一点。它甚至可以是 C 语言中的解决方案。

【问题讨论】:

    标签: c perl unix


    【解决方案1】:

    以下方法可以加速它:

    1. 只检查我们是否可以设置一个套接字到目标服务器的 80 端口,不要真正发送 Get http 请求,或者只是发送一个简单的 HEAD 请求。
    2. 使用多线程使其更快。

    【讨论】:

    • 这会涵盖所有所需的基础吗?如果主页出现服务器错误之类的怎么办?
    • 多线程,虽然看起来不错,但没有必要矫枉过正。通常使用异步 I/O 就足够了。
    【解决方案2】:

    这很可能是因为您是按顺序执行的。

    考虑使用LWP::Parallel::UserAgent - 它会同时运行许多请求。

    【讨论】:

      【解决方案3】:

      如果有很多链接,我建议你把程序multi-threadedfork()多做几次。这样,您就可以期待速度的提升。

      【讨论】:

      • 不幸的是我的 perl 没有用多线程编译,但我会检查多进程选项
      • 即使没有线程化 perl,您也可以使用线程。 use forks; - search.cpan.org/perldoc?forks
      • 哦,好的,这些知识对其他事情也有帮助。谢谢艾伦。但是写入文件时它会起作用吗?
      • 没问题,神圣的潜水员。是的,写入文件时应该可以工作。
      【解决方案4】:

      httping怎么样?

      【讨论】:

        【解决方案5】:

        curl -I http://hostname

        如果服务不可用或找不到页面,第一行将包含 503 或 404。

        时间为 curl -I http://www.google.com 产生了这个

        real    0m0.125s
        user    0m0.004s
        sys     0m0.004s
        

        这用于 curl -I http://www.google.cmo

        real    0m0.120s
        user    0m0.004s
        sys  0m0.004s
        

        【讨论】:

        • 实际上我尝试使用 wget 它在现有网站上运行得非常快,但必须等待断开的链接。但我也会尝试卷曲。
        【解决方案6】:

        从网络中获取资源通常需要相当长的延迟。

        正如 Alan Haggai Alavi 所建议的,您可能希望将工作分配到多个并行线程/进程中。 Parallel::ForkManager 模块的文档甚至有一个您应该能够构建的示例。

        【讨论】:

        • Parallel::ForkManager 不错。
        • 是的,hillu,但我认为我不能使用并行化选项,因为我正在检查网站是否已启动,将特定 png 文件的 url 写入文件。因此,如果我将程序并行化,写入文件时不会有问题吗?
        • 据我了解,hillu 的建议您应该有多个进程/线程,但一个站点应该由一个进程监控(最多)。所以进程之间应该没有冲突。
        • 你为什么不创建一个线程来控制文件并有一个由正在检查站点的其他线程触发的事件?在触发时,他们可以提及哪个站点、延迟、响应等。
        【解决方案7】:

        我不太了解 C(BLASPHEMY!)或 Perl,但我如何看待它,我会尝试以下方法:

        • 一个线程来执行文件写入。这个线程会有一个队列,它可以在其中写入它的命令。
        • 您要检查的每个站点一个线程。该线程将使用适合您大多数其他答案的任何方法,然后通过它可以触发的事件向主线程报告。

        2cts

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-28
          • 2023-03-16
          • 1970-01-01
          • 2010-11-24
          • 2013-10-28
          • 1970-01-01
          • 2011-07-13
          • 1970-01-01
          相关资源
          最近更新 更多