2011-08-05 32 views
6

假设我正在同步HTML页上的文本,存储在localStorage中,从计算机A到计算机B.当用户编辑计算机A上的文本时,我向服务器发送一个请求,并告诉它哪些文本已更改。有没有什么办法可以让服务器告诉计算机B有新文本,而计算机B不得不继续检查?我读过关于Comet的书,但我试图不使用任何库。有没有办法?另外,如果你打算推荐Comet,你能否用简单的JavaScript和Comet来举个简单的例子?如何使用长轮询(最好不使用Comet或node.js)?

我有一个想法,但我不知道它是否会工作。在计算机B上,我发送一次请求,让服务器的文件继续延迟响应,直到出现一些新的文本。那样的话,就像长轮询一样,但是请求最终会超时。如果有一种方法可以将超时设置为从不,那么这将变得更容易。那么,任何人有任何想法?

P.S.-我只想使用JavaScript和PHP,并尝试避免使用库。不过,如果你知道一个库可以用JS和PHP来做到这一点,请告诉我。

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

哦,如果有人知道这里的聊天是如何工作的,你能告诉我吗? dr:我想从服务器发送一个请求到一个HTML页面,或者让HTML发送一个保持活动状态的请求,直到创建一个适当的响应为止。

+0

这取决于你使用HTML5吗?如果是这样,您可以使用原始套接字与每个客户端的服务器建立连接,如果没有,则必须让消费者(计算机b)持续检查更新。另外,这是生产场所,学校项目还是个人项目?它在你如何去做它有所不同:) – jdarling

+0

我使用HTML5(正如我所说我使用localStorage。:))。这是一个个人项目。其实Chrome扩展,所以我需要它是可靠的。 –

+0

由于使用Flash hacks和增加了“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

回答

2

彗星是一个长轮询的实现。

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

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

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

+0

好的。那么,有什么方法可以动态检测轮询时间应该多长时间?或者我只需要使它成为一个固定的? –

+0

因为涉及到很多服务器设置,所以我从来没有打扰过实施Comet。请参阅:http://stackoverflow.com/questions/603201/using-comet-with-php –