gpt4 book ai didi

php - 如何使用 flex 3 和 php 获取 "long polling"?

转载 作者:行者123 更新时间:2023-12-04 07:00:46 26 4
gpt4 key购买 nike

我正在为客户开发一个项目,他们的 cms 将是 flex 3 和 php。将有多个客户同时使用它,我试图让它在一个人进行更改时,其他人会看到它。

我的问题是:如果我使用 Flex 3 和 PHP,我该如何实现类似于“服务器推送”的功能。长轮询是一个可能/好的选择吗?还是有其他选择可以帮助我完成相同的任务?

任何帮助将不胜感激!

最佳答案

长轮询(又名 AJAX Comet)和 PHP 的问题在于 PHP 缺乏真正使它成为可能的线程架构。许多其他传统语言都是为了获取请求并以串行方式快速响应而构建的。

较新的语言已经到了可以完全支持这一概念的地步。事实上,您确实需要一个使用 EPOLL(基于事件/异步套接字 IO)和/或微线程处理连接的框架和 Web 服务器,这样您就可以一次处理数千个打开的连接,而不必为每个连接分配一个完整的操作系统线程打开连接到您的服务器。 (操作系统线程具有有限的资源)

我做了一个视频来解释 AJAX Comet/Long 轮询的概念。您可以在此处查看更多信息:http://www.youngtechstars.com/?p=466

现在...我确实为使用 PHP 进行长轮询的方式创建了非常 hacky 的概念证明。它需要使用定制的 NGINX 模组。首先,请求将进入 NGINX 服务器,该服务器会将请求分派(dispatch)到 PHP 进程(使用 FastCGI)。如果我希望连接保持打开状态,我将返回带有自定义 HTTP header 的响应(在本例中为“X-NGINX-WAIT-UNTIL-KEY: a10x39”或其他内容)。这将向 NGINX 发出信号以保持连接并且尚未向用户返回响应。稍后,当数据准备好并传入 key 时,我会从 PHP(或其他进程)打开一个返回 NGINX 的套接字。这样做会导致 NGINX 执行第二个请求,并在内部使用相同的请求再次访问 PHP 进程以获取用户的响应。这是一个概念证明并且完美无缺,但我从未发布过它。此模型在集群 Web 环境中存在问题,因为您必须跟踪具有打开连接的服务器。

Flex 与在普通 javascript 中执行 XmlWebRequest 一样,对于长轮询没有任何问题,因为请求是异步处理的。

但是,有许多框架可以开箱即用地支持这一点:

  • Jetty WebServer - 一个纯 Java Web 服务器,它利用延续和非阻塞 IO (java.nio) 来支持大量打开的连接。
  • XEP-0206: XMPP Over BOSH - XMPP (Jaber) 的 HTTP Binding/Bosh 系统规范
  • ApacheMQ (消息队列)- AJAX Comet/HTTP 长轮询页面
  • liberator - 为 AJAX Comet 构建的商业网络服务器
  • lightstreamer - 为 AJAX Comet 和 HTTP 流构建的商业网络服务器
  • 关于php - 如何使用 flex 3 和 php 获取 "long polling"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1875687/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com