【问题标题】:Online chat - Ajax poll or Reverse Ajax在线聊天 - Ajax poll 或 Reverse Ajax
【发布时间】:2011-03-10 09:23:32
【问题描述】:

经过一整天的搜索,我想谈谈在线聊天的最佳解决方案。

这是我所知道的:

Ajax 轮询是旧的、消耗带宽且不可扩展的方式。它每 X 秒向服务器请求新数据。这意味着每 X 秒执行一次数据库查询 * number_of_connected_users。

反向 Ajax 及其应用程序之一(comet)需要定制的 web 服务器或专用的 comet 服务器,它可以处理 number_of_connected_users 数量的长期 http 连接。

我的实际服务器是:1 Xeon CPU、1 GB RAM 和 1 Gb/s 带宽。服务器是虚拟机(因此具有高度可扩展性)。

我需要一个可以随着服务器和未来不断增长的用户群而扩展的解决方案。

我的疑惑是:

  • ajax 轮询方法对我的带宽使用有多大影响?

  • 我可以通过哪种方式优化 ajax 轮询以仅在必要时进行 db 查询?

  • comet 服务器可以在 web-server (Apache) 的同一台机器上运行吗?

  • 使用彗星方式,我仍然需要一个间隔来对数据库进行查询然后发送响应,那么实时在哪里?

  • 用我的实际服务器,彗星方式能行吗?

提前谢谢你。

【问题讨论】:

    标签: ajax apache comet


    【解决方案1】:

    我正在用 PHP 编写我的网站。

    那么,我需要运行一个服务器(如 twisted)并用 python 编写我的聊天应用程序吗? 此应用应处理传入的 ajax 请求并将新数据推送给客户端。

    如果我理解得很好,这种方法不需要数据库,对吧?

    【讨论】:

    • 没错。 apache 的问题在于它不支持长时间运行的请求,因为它遵循每个请求一个线程的范例。这将在多个连接下中断。
    【解决方案2】:

    如果你能侥幸逃脱,你永远不应该使用轮询。它阻塞了服务器和客户端上的资源。服务器必须通过轮询发出更多的数据库请求,更多地检查数据是否已更改。

    ajax 轮询方式也会产生更多不必要的请求。通过轮询,您可以使用内存和 CPU。 Comet(如果处理得当)只使用内存。

    comet 服务器可能无法在 Apache 下运行。 Apache 似乎不是为长时间运行的请求而设计的。我建议在 ruby​​(使用 EventMachine)an example、Python(使用 Twisted)或 C 中实现你的彗星服务器。

    我不明白为什么您需要有一个时间间隔来进行数据库查询。当您进行更改时,您只需告诉 Comet 服务器将更改通知必要的用户即可。

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 2010-12-09
      • 2010-11-08
      • 2011-01-12
      • 2011-07-12
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多