在 PHP 中使用 comet?

2023-12-08

我正在考虑使用 PHP 后端实现实时聊天,但我在讨论 comet 的网站上看到了这样的评论:

我的理解是 PHP 是 彗星的语言很糟糕,因为 Comet 要求你保留一个 对每个人开放的持久连接 浏览器客户端。使用 mod_php 这个 意味着捆绑一个阿帕奇孩子 为每个客户全职工作 根本无法扩展。我的人 知道做Comet的东西主要是 使用 Twisted Python 设计 处理数百或数千 同时连接。

这是真的?或者它是可以配置的东西吗?


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

Apache

每个对 Apache 的请求都将使用一个工作线程,直到请求完成,这对于 COMET 请求来说可能会很长。

这篇关于阿贾克斯的文章提到在 Apache 上使用 COMET,而且这很困难。该问题并非 PHP 特有,并且适用于您可能想要在 Apache 上使用的任何后端 CGI 模块。

建议的解决方案是使用“事件”MPM 模块这改变了将请求分派到工作线程的方式。

此 MPM 尝试修复 HTTP 中的“保持活动问题”。 客户完成第一个任务后 请求时,客户端可以保留 连接打开,并进一步发送 使用相同套接字的请求。这 可以节省大量开销 创建 TCP 连接。然而, Apache 传统上保留整个 等待数据的子进程/线程 来自客户,它带来了自己的 缺点。为了解决这个问题, 该 MPM 使用专用线程来 处理两个监听套接字,并且 Keep Alive 中的所有套接字 状态。

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

PHP

现在,考虑到问题的另一面,即使您解决了每个 comet 请求占用一个线程的问题,每个请求仍然需要一个 PHP 线程 - 这就是 FastCGI 无济于事的原因。

你需要类似的东西延续当观察到彗星请求所触发的事件时,它允许恢复彗星请求。 AFAIK,这在 PHP 中是不可能的。我只在 Java 中见过它 - 请参阅 ApacheTomcat服务器.

Edit:

有一个文章在这里关于使用负载均衡器(HAProxy)以允许您在同一服务器的端口 80 上运行 apache 服务器和支持 comet 的服务器(例如 jetty、用于 Java 的 tomcat)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP 中使用 comet? 的相关文章

  • 如何确定 n 高数字金字塔中的最大路线成本

    我有一个像这样的数字金字塔 7 4 8 1 8 9 2 4 6 7 4 6 7 4 9 4 9 7 3 8 8 routes 32 每个数字都按其系列中的强大程度进行索引 0 9 gt 1 1 8 gt 5 2 8 gt 4 3 7 gt
  • 提交ajax表单并停留在同一页面不起作用

    我想将用户的评论存储在我的数据库中 当用户提交时 我不想将他们重定向到新页面 我有以下代码 但它不起作用 我的 HTML 代码
  • symfony2 选择单选框的默认值

    我的项目是使用 Silex 和 Symfony 组件 即表单组件 编写的 我尝试创建一组从类中构建的单选按钮 并且我想预先选择其中一个单选按钮 我创建这样的表格 form app form factory gt createBuilder
  • 在php中获取二进制数据大小的正确方法是什么?

    我已阅读文件的一部分 现在想确保该部分的大小正确 我怎样才能在 php 中做到这一点 part fread file 1024 return some function part 1024 我已经阅读了这些示例 但我怀疑是否要使用 strl
  • 如何将 Filesystem 类的 glob 方法与 StorageFacade 结合使用?

    这涉及到拉拉维尔 5 我可以看到Illuminate Filesystem Filesystem一个方法叫做glob pattern flags 0 不幸的是 这个方法并没有体现在默认的情况下FilesystemAdapter随 Larav
  • 在 symfony2 中为特定控制器设置 max_execution_time

    Using ini set 我可以扩展最大执行时间一个脚本的 在Symfony2 我可以添加ini set to web app php and web app dev php将增加的执行时间应用于所有控制器 但在这种情况下 我只想扩展最大
  • 如何在Web服务中传递URL

    我想将此 URL 作为网址中的值传递http localhost h2orn php verify php email emails hash hash但是 我只能在 符号之前传递 我想传递所有 URL 我正在使用java网络服务 代码在这
  • 如何在 Laravel 5.5 中编辑“页面因不活动而已过期”的视图

    在 Laravel 5 5 中 当您使用 CSRF 保护 默认情况下 并且在长时间不活动后发送发布请求时 您将收到此错误页面 屏幕截图 我对此错误表示同意 但是 我需要更改此错误的视图 文本以确保与我的应用程序风格和语言相匹配 关于如何编辑
  • symfony 2 形式的函数 getName 做什么

    这是我的表格类 class CommentType extends AbstractType public function buildForm FormBuilder builder array options builder gt ad
  • 适用于 Windows 的 PHP 支持的 GUI 应用程序

    我知道 PHP 是一种解释性语言 对于基于 Web 的事物来说 不是为在实际操作系统上运行 GUI 应用程序而设计的 但是有没有办法呢 基本上 是否有一个框架 系统允许我创建 本机 基本上是二进制文件 exe 看起来像带有本机控件和所有内容
  • 登录后所有页面都应该是https吗?

    这有点难以解释 但我会尽力 有一个网站 每个页面上都有登录表单 其中包含用户名 密码字段 这些页面未使用 SSL 用户填写用户名 密码并提交表单后 表单将被发送到 https 的身份验证页面 对于这种情况我有几个疑问 向 https 页面提
  • 将秒转换为天、小时、分钟和秒

    我想转换一个变量 uptime这是秒 分为天 小时 分钟和秒 Example uptime 1640467 结果应该是 18 days 23 hours 41 minutes 这可以通过以下方式实现DateTime http php net
  • 如何覆盖 phpunit 中导出的变量?

    我知道我可以设置环境变量 https phpunit de manual current en appendixes configuration html在我的 phpunit xml 里面
  • 需要使用 php 从远程服务器下载与 $_FILES 相同的内容[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 好的 我有处理图像上传的 php 代
  • 从外部 bash 设置环境变量

    我试图使用 PHP 从命令行 设置 bash 环境变量 但没有成功 buff array buff VARTESTKEY VARTESTVALUE buff export VARTESTKEY file put contents scrip
  • 转换MAC地址格式

    我刚刚编写了一个小脚本 从交换机中提取数百个 MAC 地址进行比较 但它们的格式为 0025 9073 3014 而不是标准的 00 25 90 73 30 14 我对如何转换它感到困惑 我能想到的最好的办法就是在 处将它们分解成碎片 然后
  • $_SESSION 中保存大量信息可以吗?

    我需要存储许多数组 SESSION以防止从 MySQL 检索信息 可以吗 其中 太多 的信息有多少 SESSION还是没有 太多 谢谢 附 或者更好地使用http php net manual en book memcache php ht
  • NodeJS 和 PHP (Laravel) 集成用于 Socket.IO 实时聊天

    目前我有一个我写过的网站PHP通过Laravel 框架 我已经使用写了一个实时聊天nodeJS with 套接字IO and Express现在我想做的是将它集成到我已经编写的 Laravel 网站中 问题是聊天必须在主页中 当前由 Lar
  • 处理查询字符串参数时 Codeigniter 缓存问题

    问候 我正在编写一个 CI Web 应用程序 它实现标准文件缓存功能 如下所示 this gt output gt cache n 我使用了段和查询字符串参数的组合 因此似乎遇到了问题 我在用例和输出类代码中看到的是 缓存仅基于段 像这样
  • PHP 中的 Zip 流

    我有一个 PHP 脚本 可以动态创建 zip 文件并强制浏览器下载该 zip 文件 问题是 我可以直接将zip文件写入连接到用户浏览器的输出流 而不是先将其保存为服务器上的真实文件 然后发送文件吗 提前致谢 如果您的 Web 服务器运行的是

随机推荐

  • 内联 SVG 的重复(过滤器)ID

    创建带有滤镜的内联 SVG 时 我必须为滤镜定义一个 ID 当我自动生成几个略有差异的内联SVG时 第一个图像的过滤器优先 覆盖 后续图像的过滤器 因为重复过滤器 ID 现场演示 更清晰 http jsfiddle net 9wqgS p
  • Automapper复杂类型映射异常

    我正在尝试为新模块实现 AutoMapper 我在网站上有 MVC 模型 我正在研究它 它看起来像这样 public class MvcModel public Params Params get set public Steps Step
  • 在参数化类中使用参数时获取不同的(非默认)小部件(holoviz 参数面板)

    我使用参数化类来构建面板仪表板 我想用一个交叉选择器但是当查看库 Param 提供的选项时 此选择器似乎不可用 似乎只有一个列表选择器 我如何使用 Param 获取此 CrossSelector import param import pa
  • 自动装配两个实现相同接口的 bean - 如何将默认 bean 设置为自动装配?

    背景 我有一个 Spring 2 5 Java Tomcat 应用程序 有下面这个bean 在整个应用程序的很多地方都用到了它 public class HibernateDeviceDao implements DeviceDao 以及以
  • 函数内部的静态变量不能保存对单例的引用

    我注意到 PHP 中的单例有一个奇怪的行为 除了举一个例子之外 没有更好的方法来解释这一点 假设我有以下单例类 class Singleton protected function construct Deny direct instant
  • 这些是什么 ASCII 字符?

    我有两个字符需要在 php 字符串中进行搜索和替换 不知何故 这些不同于 有谁知道我可以使用什么函数从 php 字符串中删除这些内容 这就是当有人在 Outlook 中向您发送电子邮件时会发生的情况 因此请小心 因为您完全错过了这些单引号的
  • iOS copyWithZone 仅在使用设备时无法识别选择器

    我正在开发一个 iPad 应用程序 仅当 sqlite 数据库中有某些数据时才会启动初始屏幕 如下所示 if int MyStore sharedInstance mode lt 0 self connectionSettingsViewC
  • 为 ggplot - R 安排数据帧格式

    我想将数据从宽格式重塑为长格式 以便我可以使用 ggplot 来创建图表 我在正确排列数据时遇到一些问题 到目前为止 我从 27 个数据帧的列表开始我的流程 仅向您展示前 10 个数据帧 gt str NDVI stat List of 2
  • SyntaxError:Object.parse(本机)npm 请求输入意外结束

    您好 我不明白为什么会出现此错误 我认为收到数据后就会执行回调 知道这是从哪里来的吗 多谢 节点错误 SyntaxError Unexpected end of input at Object parse native 我解析主体的答案 然
  • SQL 代理:设置最大执行时间

    下午 我在 MS 2K8 BI 服务器上运行多个 SQL 代理作业 其中一些每天运行一次 其他每小时运行一次 每两分钟运行一次 另一个进程的心跳监视器 还有一个应用程序可以全天候每隔几分钟导入一次数据 有时 更新和报告的某些组合会发生冲突
  • 使用 Facebook sdk 发布嵌入的 YouTube 链接

    当您有意在 FB 上分享 YouTube 链接时 它会自动将 YouTube 播放器嵌入到您的墙上 如下所示 但是 当我尝试使用发布相同的视频时FB sdk HelloFacebookSampleActivity gt postStatus
  • 如何从 C# winform 应用程序检索屏幕分辨率?

    如何检索我的 C Winform 应用程序运行时的屏幕分辨率 您是否只需要标准应用程序使用的区域 即排除 Windows 任务栏和停靠窗口 如果是这样 请使用Screen WorkingArea 属性 否则 使用屏幕边界 如果有多个显示器
  • 嵌入式 Facebook Like-Box 不允许我设计它。为什么?

    我正在尝试在我的网站页面上放置一个 Facebook Like Box 然后通过我自己的 CSS 对其进行样式设置 主要是为了增加 div stream content 的高度 这个想法是让 FB feed 充当新闻 feed 但我不希望用
  • Rails 卷曲语法

    我可以从我的 Rails 应用程序运行以下命令 Hash from xml x curl d admin true http localhost 8888 rescue nil 现在我想用变量替换 admin true 如果我有 x adm
  • 为什么数组大小为 1 [重复]

    这个问题在这里已经有答案了 可能的重复 C 编程语言中数组的大小 我正在尝试编写一个函数 如果数组中有值则返回 1 这是代码 int inArrayInt int iVal int iArray int i int arrayL sizeo
  • 使用 Python BeautifulSoup 查找页数

    我想从 Steam 页面中提取总页码 本例中为 11 我相信以下代码应该可以工作 返回 11 但它返回一个空列表 就像如果没有找到一样paged items paging pagelink class import requests imp
  • 在自定义 JsonConverter 中,如何确定 Utf8JsonReader 数字标记是小数还是长整型?

    我有这个json转换器需要将给定的属性值转换为小数或长整型 具体取决于该值 但我似乎无法确定属性值何时为小数或长整型 因为 tokentype 只能检测数字 我该如何解决这个问题吗 public override IDictionary
  • 设置捆绑包的自定义视图控制器?

    我有一个带有设置视图的应用程序 可以从远程服务器动态加载设置 运行良好 我还想在 iPhone 设置中提供这些功能 但设置包似乎仅限于加载并保存到本地 NSUserDefaults 的简单键值 有没有办法为此指定自定义视图 设置包基于 pl
  • NSAttributedString,整体更改字体但保留所有其他属性?

    假设我有一个NSMutableAttributedString 该字符串有多种多样的mix整个格式化 这是一个例子 这个字符串是hell to change in iOS it really sucks 然而 字体本身并不是您想要的字体 我
  • 在 PHP 中使用 comet?

    我正在考虑使用 PHP 后端实现实时聊天 但我在讨论 comet 的网站上看到了这样的评论 我的理解是 PHP 是 彗星的语言很糟糕 因为 Comet 要求你保留一个 对每个人开放的持久连接 浏览器客户端 使用 mod php 这个 意味着