【问题标题】:JQuery & PHP - can I push from the server?JQuery & PHP - 我可以从服务器推送吗?
【发布时间】:2011-05-11 19:49:29
【问题描述】:

我刚刚开始研究 JQuery;到目前为止,一切都是 PHP。

只是好奇:如果服务器检测到一个事件并想要更新用户的浏览器,我可以做服务器推送,还是客户端必须轮询?

【问题讨论】:

  • 目前没有可靠的推送方式。看看长轮询。

标签: php jquery ajax push


【解决方案1】:

客户端必须轮询,但您可以执行long polling,即保持请求处于活动状态,直到服务器有事件要推回(即完成请求)。

否则,您可以使用 Web Sockets。

【讨论】:

  • 这次找到我了。该死! +1 :)
  • 并且客户端可以在长轮询期间发出其他服务器请求?如果需要可以取消吗?
  • @Mawg 客户端可以发出更多请求,并中止现有请求。也许是一场我即将输掉的友好竞争!
【解决方案2】:

HTTP 协议遵循请求-响应原则,这意味着 服务器只能在来自的请求之后生成响应 客户端。这意味着服务器无法向 客户一开始就没有收到请求。这是 不是 PHP 问题,而是 HTTP 问题。所以不,你不能推送,客户端必须发出请求,或者 poll。正如 alex 建议的那样,您可以查看长轮询。

【讨论】:

  • +1 好点;在底部都是 HTTP,不管是哪种编程语言
【解决方案3】:

这与 jquery 并没有太大的关系,而是与 Http 本身有关。

服务器主动向客户端推送任何东西基本上是不可能的,两种可能的解决方案是:

  1. 保持 Http 连接而不关闭它。

  2. 轮询

【讨论】:

    【解决方案4】:

    您可以使用“彗星”来执行此操作。但是,PHP 是一种用于 Comet 的糟糕语言。在 PHP 中执行 Comet(这类工作)的一种更流行的技术是长轮询。

    长轮询的想法是向服务器创建一个 AJAX 请求。服务器接受连接但不响应(即:while 循环,其中包含 sleep(1))直到事件发生。这可能是秒、分钟等。

    但是,为了使长轮询“工作”,您必须确保连接不会很快超时,因此请将您的执行时间设置为高(分钟,或尽可能无限制)。您还需要在客户端上编写处理服务器断开/超时的代码。发生这种情况时,应该启动一个新请求。

    希望这会有所帮助!

    【讨论】:

    • +1 非常感谢您提供信息丰富且详细的回答。 “PHP 是一种用于 Comet 的糟糕语言”——你有什么建议?
    【解决方案5】:

    您可以让客户端使用像彗星等长轮询机制,但没有办法真正“推动”。

    【讨论】:

    • PHP 中的 websocket 怎么样?
    猜你喜欢
    • 2012-02-26
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2012-04-01
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多