【发布时间】:2011-05-11 19:49:29
【问题描述】:
我刚刚开始研究 JQuery;到目前为止,一切都是 PHP。
只是好奇:如果服务器检测到一个事件并想要更新用户的浏览器,我可以做服务器推送,还是客户端必须轮询?
【问题讨论】:
-
目前没有可靠的推送方式。看看长轮询。
我刚刚开始研究 JQuery;到目前为止,一切都是 PHP。
只是好奇:如果服务器检测到一个事件并想要更新用户的浏览器,我可以做服务器推送,还是客户端必须轮询?
【问题讨论】:
客户端必须轮询,但您可以执行long polling,即保持请求处于活动状态,直到服务器有事件要推回(即完成请求)。
否则,您可以使用 Web Sockets。
【讨论】:
HTTP 协议遵循请求-响应原则,这意味着 服务器只能在来自的请求之后生成响应 客户端。这意味着服务器无法向 客户一开始就没有收到请求。这是 不是 PHP 问题,而是 HTTP 问题。所以不,你不能推送,客户端必须发出请求,或者 poll。正如 alex 建议的那样,您可以查看长轮询。
【讨论】:
这与 jquery 并没有太大的关系,而是与 Http 本身有关。
服务器主动向客户端推送任何东西基本上是不可能的,两种可能的解决方案是:
保持 Http 连接而不关闭它。
轮询
【讨论】:
您可以使用“彗星”来执行此操作。但是,PHP 是一种用于 Comet 的糟糕语言。在 PHP 中执行 Comet(这类工作)的一种更流行的技术是长轮询。
长轮询的想法是向服务器创建一个 AJAX 请求。服务器接受连接但不响应(即:while 循环,其中包含 sleep(1))直到事件发生。这可能是秒、分钟等。
但是,为了使长轮询“工作”,您必须确保连接不会很快超时,因此请将您的执行时间设置为高(分钟,或尽可能无限制)。您还需要在客户端上编写处理服务器断开/超时的代码。发生这种情况时,应该启动一个新请求。
希望这会有所帮助!
【讨论】:
您可以让客户端使用像彗星等长轮询机制,但没有办法真正“推动”。
【讨论】: