如何使用长轮询(最好不用Comet或node.js)?

6
假设我正在将存储在计算机A和计算机B之间的localStorage中的HTML页面上的文本同步。当用户在计算机A上编辑文本时,我会向服务器发送请求,并告诉它文本发生了什么变化。有没有办法让服务器告诉计算机B有新的文本,而不必让计算机B不断检查?我已经了解了Comet,但我尝试不使用任何库。有方法吗?如果您要建议Comet,可以使用纯JavaScript和Comet给出一个简单的例子吗?
我有一个想法,但我不知道它是否有效。在计算机B上,我只发送一次请求,并让服务器的文件延迟响应,直到有新的文本。这样,就像长轮询,但请求最终会超时。如果有一种设置超时时间永久的方法,这将变得更加容易。所以,有人有什么想法吗?
附言-我想只使用JavaScript和PHP,并尽量避免使用库。但是,如果您知道可以使用JS和PHP完成此操作的库,请告诉我。
另外,我知道有类似的问题,但我找到的答案不令人满意。
哦,如果有人知道这里的聊天是如何工作的,也能告诉我吗?
tl; dr:我想从服务器向HTML页面发送请求,或者让HTML发送一个保持活动状态直到创建适当响应的单个请求。

这取决于您是否使用HTML5?如果是,则可以使用原始套接字从每个客户端与服务器建立连接;如果不是,则必须让消费者(计算机B)执行持续的更新检查。此外,这是用于生产网站、学校项目还是个人项目?这会影响您如何处理它 :) - jdarling
我正在使用HTML5(正如我所提到的,我正在使用localStorage :))。这是一个个人项目。实际上是一个Chrome扩展程序,所以我需要它是可靠的。 - Some Guy
由于有使用Flash黑客和附加功能的“localStorage”实现,我没有做出这样的假设:)。 这里有一些可能对您有用的链接; http://www.phpclasses.org/package/3213-PHP-Web-based-chat-using-AJAX-to-update-the-dialog.html 和 http://www.ibm.com/developerworks/web/library/x-ajaxxml8/index.html?ca=drs-这些涵盖了PHP,MySQL和Ajax的基本“聊天”应用程序。 应该是一个很好的起点。 - jdarling
哦,是啊,我忘记了那些技巧。 不管怎样,谢谢你提供的链接。稍后会去看看。 - Some Guy
1个回答

2

Comet是长轮询的一种实现方式。

问题在于主机必须保持所有资源可用以响应所有开放的请求。服务器必须经过仔细配置才能在负载下平稳工作。这不是一个“开箱即用”的解决方案。

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

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


好的。那么,有没有办法动态检测轮询时间应该是多长?还是我只能将其固定下来? - Some Guy
我从来没有费心去实现Comet,因为它涉及到很多服务器设置。请参见:https://dev59.com/rXRB5IYBdhLWcg3wgHar - Diodeus - James MacFarlane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接