【问题标题】:Quick test if web-page offer asynchronous HTTP?快速测试网页是否提供异步 HTTP?
【发布时间】:2011-04-09 18:57:06
【问题描述】:

我正在从另一家公司的网络供稿中获取当前数据。它是通过 HTTP 简单地获取 XML 文件。他们没有为我提供太多文档 - 只是一个 URL。

因为我需要尽快知道他们网站上的数据何时发生变化,所以我需要经常轮询,这对双方来说都不是一个令人满意的解决方案。

我正要向他们推荐他们设置某种服务器推送——大概是一个长期的 HTTP 连接,服务器发送异步更新。我对这方面的任何通用协议都不是很熟悉。我突然想到他们可能已经提供了这个,而我太无知了。

是否有基于 Web 的通用协议用于通过 HTTP 进行服务器推送?如果有的话,有没有一种快速的方法可以让我检查他们是否支持它,以免我通过要求已经可用的东西让自己看起来很愚蠢。

(独立于平台、基于 Python 的解决方案的奖励积分,但我会尽我所能。)

【问题讨论】:

  • 您需要多久知道数据变化?接近实时?如果返回的有效负载大小对服务器实现者来说是个问题,也许您可​​以在轮询时传递一个 modifiedAfter 参数 (/feed?modifiedAfter=)。这样您就只能获得最新的 Feed 项。

标签: python http asynchronous xmlhttprequest


【解决方案1】:

你想要的是HTTP Streaming;阅读this page。 “Comet”就是这种技术的俗称。一种实现是Ajax Push Engine (APE);我刚刚给你的页面还有其他几个。

现在我认为自动测试服务器是否支持推送技术是不可能的,因为目前还没有这方面的标准,而且使用的协议会因实施而异。

您也可以使用周期性刷新(“轮询”),这种技术的优点是:您不需要在服务器上安装额外的软件,并且无需您正在轮询的服务器(它如果您要查询的服务器不会安装 Comet,则使用 Comet 是不可行的)。

有关减少轮询带宽使用的更多信息和技巧,请参阅this page。其中一些需要您正在轮询的服务器做出一些努力。

【讨论】:

  • 我知道 Meteor 但 APE 似乎真的很棒 :) 感谢链接人 :)
  • 如何判断其他网络服务器是否已经支持 HTTP 流式传输?
  • @Oddthinking 查看修改后的答案。
  • 我想我必须接受快速测试是不可能的。感谢您的澄清。
【解决方案2】:

我建议您阅读 this Wikipedia article 关于该主题的内容。您想要的当然是可能的,但它可能并非所有浏览器都支持。

也就是说...我通常建议不要在网络上使用推送技术,因为它们比请求/响应范例更快地消耗服务器的资源。

也许还有其他方法?经常轮询看看改的文件至少是小payload...为什么双方都不满意?

除非您可以让另一家公司改变其某些做法——也许是通过 FTP 向您发送新文件,或者调用网络服务让您的公司知道文件已更改——否则您可能会陷入轮询。

【讨论】:

  • 感谢您的回答。我有几个澄清和cmets。 (1) 不涉及浏览器。 (2) 很难代表别的公司说话,但是对这个接口的需求很低,而且更新很少,很可能比我经常轮询便宜。 (3) 话虽如此,我很惊讶我的投票对他们的系统产生了明显的影响,但他们的技术人员似乎对此感到担忧。我没有接近拒绝服务类型级别,我怀疑他们的系统设置不当,导致每个 HTTP GET 都非常昂贵。
  • (4) 我也许可以让公司改变其做法 - 例如。回调一个网络服务,但我想确定他们还没有提供我想要的。
  • (5) 链接的文档非常有用。 HTTP Server Push 描述了我的预期。我刚刚检查了 MIME 类型,它不是 multipart/x-mixed-replace
  • 所以我的问题似乎已经被您对此的解释细化了:如何简单地判断服务器是否“在将响应数据提供给客户端后终止连接”。 Python 的urllib2.urlopen() 和命令行wget 在获取XML 后都会正常终止。这是否证明它不受支持?
【解决方案3】:

我不知道有什么方法可以测试网络服务器是否支持推送技术。
您应该询问该公司是否可以采用Comet 方法来避免轮询。

对于 Comet 基于 python 的解决方案,请查看here

【讨论】:

    【解决方案4】:

    为了避免不必要的下载,我会检查 etags 和 Last-modified 标题,如此处所述

    http://diveintopython3.ep.io/http-web-services.html

    【讨论】:

    • 感谢您的建议。这将是对我目前正在进行的幼稚投票的改进。不幸的是,它们不支持Last-ModifiedIf-Modified-Since。当我接近它们时,我会将其包含在选项列表中,因为它可能比完整的 Comet 解决方案更容易销售。
    猜你喜欢
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 2011-09-29
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    相关资源
    最近更新 更多