当前位置: 首页 > 面试题库 >

在PHP中使用Comet吗?

罗祺
2023-03-14
问题内容

我当时在考虑使用PHP后端实现实时聊天,但在讨论彗星的网站上遇到了以下评论:

我的理解是,PHP是Comet的一种糟糕的语言,因为Comet要求您保持对每个浏览器客户端开放的持久连接。使用mod_php意味着为每个客户端完全占用一个Apache子节点,而这根本无法扩展。我认识的从事Comet工作的人大多使用TwistedPython,该工具旨在处理数百或数千个同时连接。

这是真的?还是可以配置的东西?


问题答案:

同意/扩展已经说过的内容,我认为FastCGI不能解决问题。

Apache

进入Apache的每个请求都将使用一个工作线程,直到请求完成为止,这对于COMET请求来说可能是很长的时间。

关于Ajaxian的这篇文章提到在Apache上使用COMET,这很困难。该问题并非特定于PHP,它适用于您可能想在Apache上使用的任何后端CGI模块。

建议的解决方案是使用“事件”MPM模块,该模块更改将请求分配到工作线程的方式。

该MPM尝试修复HTTP中的“保持活动状态”。客户端完成第一个请求后,客户端可以保持连接打开,并使用同一套接字发送其他请求。这样可以节省创建TCP连接时的大量开销。但是,Apache传统上会保留整个子进程/线程来等待来自客户端的数据,这有其自身的缺点。为了解决此问题,该MPM使用专用线程来处理侦听套接字和处于“保持活动”状态的所有套接字。

不幸的是,这也不起作用,因为它只会 请求完成后才“打no” ,等待客户端的新请求。

PHP

现在,考虑问题的另一面,即使通过在每个彗星请求中保留一个线程来解决该问题,每个请求仍将需要一个PHP线程-这就是为什么FastCGI无法提供帮助。

您需要像Continuations这样的东西,当观察到彗星请求触发事件时,它可以恢复。AFAIK,这在PHP中是不可能的。我只在Java中看到过它-请参阅Apache Tomcat服务器。

编辑:

这里有一篇关于使用负载平衡器(HAProxy)的文章,它允许您在同一服务器的端口80上同时运行apache服务器和启用了彗星的服务器(例如,jetty,tomcatfor Java)。



 类似资料:
  • 这是一个jQuery插件,可以更轻松地使用 comet 服务器。如果您不熟悉什么是comet,那么这篇有关ajax的文章将提供相当不错的概述(虽然有些过时)。jQuery.comet处理维护与服务器的连接(长轮询),并使服务器更新可作为事件使用。 与任何其他jQuery插件一样,只需jquery.comet.js在jQuery包含之后将其包含在页面中comet,您的jQuery对象($)上就会有一

  • comet是一种web服务器主动与浏览器通信的技术。可以用于web聊天,邮件提醒等场景。 auto-comet是基于javaEE servlet3.0的comet框架。auto-comet亦在帮助你简单、快速的构建高效、安全的comet服务。 基于异步servlet的auto-comet具有占用服务器资源少且跨平台的优点。 auto-comet需要运行在实现了servlet3.0规范的中间件中,比

  • 问题内容: 我已经对使用javascript的服务器推送进行了一些研究,发现普遍的共识是我要寻找的是“ Comet”设计模式。是否在jQuery之上构建了该模式的任何良好实现?如果没有,那么该模式是否有任何好的实现?而且,无论这些问题的答案是什么,从实现的角度来看,是否有关于此模式的文档? 问题答案: 我写了Till提到的插件。该插件是Bayeux协议的实现,目前支持长轮询(通过AJAX的本地服务

  • WACS (读音 "wax") 是一个全功能的 Comet 服务器,采用 PHP 开发,体积小、速度快,可通过简单文件实现PUSH请求,同时也包含一个Web代理服务器。

  • 所以我正在尝试在提交表单后重定向到一个特定的页面。我尝试使用header,但它给我的错误警告是:无法修改header信息-headers已经发送 我的表单: 我的PHP连接到表单:

  • 本节介绍如何使用PHP编程语言对JSON对象进行编码和解码。让我们从准备环境开始,使用PHP for JSON开始编程。 环境 从PHP 5.2.0开始,JSON扩展默认捆绑并编译为PHP。 JSON函数 功能 描述 json_encode 返回值是JSON表示形式。 json_decode 解码JSON字符串。 json_last_error 返回上次发生的错误。 json_encode PHP