【问题标题】:How to use long-polling (preferably without Comet or node.js)?如何使用长轮询(最好没有 Comet 或 node.js)?
【发布时间】:2011-08-05 15:14:14
【问题描述】:

假设我正在同步 HTML 页面上的文本,该页面存储在 localStorage 中,从计算机 A 到计算机 B。当用户在计算机 A 上编辑文本时,我向服务器发送请求,并告诉它更改了哪些文本。有什么方法可以让服务器告诉计算机 B 有新文本,而无需计算机 B 继续检查?我读过关于 Comet 的文章,但我尽量不使用任何库。有办法吗?另外,如果您要推荐 Comet,您能否举一个使用纯 JavaScript 和 Comet 的简单示例?

我有一个想法,但我不知道它是否可行。在计算机 B 上,我发送了一次请求,并让服务器的文件一直延迟响应,直到有一些新文本。这样,它就像长轮询,但请求最终会超时。如果有办法将超时设置为从不,这将变得容易得多。那么,有人有什么想法吗?

P.S.- 我只想使用 JavaScript 和 PHP,并尽量避免使用库。不过,如果您知道可以使用 JS 和 PHP 执行此操作的库,请告诉我。

另外,我知道有这样的问题,但我找到的答案并不令人满意。

哦,如果有人知道这里的聊天是如何运作的,你能告诉我吗?

tl;dr:我想从服务器向 HTML 页面发送请求,或者让 HTML 发送一个请求,该请求在创建适当的响应之前一直保持活动状态。

【问题讨论】:

  • 这取决于您是否使用 HTML5?如果是这样,您可以使用原始套接字从每个客户端与您的服务器建立连接,如果不是,那么您将不得不让消费者(计算机 b)执行持续检查更新。另外,这是用于生产现场、学校项目还是个人项目?这对你如何去做会有所不同:)
  • 我正在使用 HTML5(正如我所提到的,我正在使用 localStorage。:))。这是一个个人项目。实际上是一个 Chrome 扩展,所以我需要它是可靠的。
  • 由于有使用 Flash hack 和附加功能的“localStorage”实现,我没有做出这样的假设 :)。以下是一些可能对您有用的链接; phpclasses.org/package/…ibm.com/developerworks/web/library/x-ajaxxml8/… 这些涵盖了基本“聊天”应用程序的 PHP、MySQL 和 Ajax。应该是一个很好的起点。
  • 哦,是的,我忘记了那些黑客。无论如何,感谢您的链接。稍后会检查一下。

标签: php javascript comet


【解决方案1】:

Comet 是长轮询的一种实现。

问题是主机需要为所有打开的请求保留所有可用资源。必须仔细配置服务器以使其在负载下顺利工作。这不是“开箱即用”的解决方案。

另一个缺点是每个用户都必须绑定到特定的服务器 - 因此没有简单的方法来负载平衡请求。

坚持定期轮询通常是最好的选择。

【讨论】:

猜你喜欢
  • 2011-03-16
  • 2011-02-03
  • 2012-07-07
  • 1970-01-01
  • 2011-08-08
  • 2011-05-21
  • 1970-01-01
  • 2010-12-24
  • 2011-02-27
相关资源
最近更新 更多