【问题标题】:How to most quickly get small, very frequent updates from a server?如何最快地从服务器获得小而频繁的更新?
【发布时间】:2011-08-06 10:05:56
【问题描述】:

我正在设计一个网络应用程序,它将使用 AJAX 与嵌入式设备上的服务器进行通信。但对于一项功能,客户端需要在较长的一段时间内尽可能接近实时地获得非常频繁的更新(>10 次/秒)。同时需要不时处理典型的 AJAX 请求。

此项目独有的一些注意事项:
该数据将非常小,可能不会超过一个数值。
一次只有 1 个客户端连接到服务器,因此扩展不是问题。
客户端和服务器将驻留在同一个本地网络上,因此连接将快速可靠。
该应用程序专为 Android 设备设计,因此我们可以利用任何特定于平台的浏览器功能。
后端很可能会在 Python 中使用 Apache 上的 WSGI 或 lighttpd 来实现,但这仍有待讨论。

我正在研究 Comet 技术,包括 XHL 长轮询hidden iframe,但我对 Web 开发还很陌生,我不知道不知道我们能期待什么样的表现。服务器在准备数据时应该没有任何问题,只需尽快将其推送到客户端即可。 对于任何 Comet 技术,甚至是常规的 AJAX 轮询,每秒 10 次更新是否是不合理的期望?或者您有其他建议的方法吗?

我意识到这最终需要进行一些原型设计,但如果有人可以给我一个大致的估计或更好但特定的技术(客户端和服务器端),在这种情况下提供最佳性能,那将是很有帮助。

【问题讨论】:

  • 每秒 10 次对于 Ajax 来说是相当高的。我认为请求的平均时间会超过 100 毫秒。
  • 我听说 100 毫秒是处理请求本身所期望的最佳时间,不计算任何后端处理时间。

标签: ajax performance architecture client-server comet


【解决方案1】:

我不确定这是否会有所帮助,但您可能想尝试 Comet 风格的 ajax

http://ajaxian.com/archives/comet-a-new-approach-to-ajax-applications

【讨论】:

  • 我认为发帖人已经知道了,因为他在帖子中提到了这一点。
  • 我读的有点晚了。不过,有一些信息的链接并没有什么坏处。
【解决方案2】:

您可能需要考虑 WebSockets。这样您就不必轮询,您将直接从您的服务器接收数据。我不确定目前有哪些服务器实现可用,因为它仍然是一项相当新的技术,但我发现了一篇关于 Android 上 WebSockets 库的博客文章:

http://anismiles.wordpress.com/2011/02/03/websocket-support-in-android%E2%80%99s-phonegap-apps/

【讨论】:

  • websockets - 我看起来很有趣! dev.w3.org/html5/websocketswebsocket.org
  • Websockets 听起来像我需要的,但似乎浏览器支持非常有限。在 Android 上使用 Websocket 需要这个 Phonegap 框架吗?
  • @Travis 不,这不是必需的,这只是该示例中的目标平台,因为 Phonegap 被用于开发他们的应用程序。事实上,你不应该局限于在浏览器中使用它,如果你愿意,你可以制作一个支持 WebSockets 的自定义应用程序。您只需要自己实现 W3C WebSocket API:dev.w3.org/html5/websockets 浏览器应该为您做的就是使用内置的 WebSocket 类将传入数据连接到 JavaScript 事件。自己做,你会直接处理数据。 免责声明:这是理论上的,我自己还没有尝试过。
【解决方案3】:

对于 Python 后端,您可能需要查看 Twisted。我也会推荐 WebSocket 方法,但如果做不到这一点,并且由于您似乎专注于浏览器客户端,我会默认使用 HTTP 流而不是轮询或长轮询。 jQuery Plugin 实现了一个 http 流式 Ajax 客户端,并专门声称支持 Twisted。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2016-09-02
    • 2011-10-23
    相关资源
    最近更新 更多