gpt4 book ai didi

PHP:长轮询和 Comet 相关

转载 作者:行者123 更新时间:2023-11-29 18:30:12 25 4
gpt4 key购买 nike

最近,我要为我的网站做一个即时通知系统。我听说 COMET 在这种情况下必不可少。

我已经搜索 PHP 和 Comet 一段时间了,但是,我发现的指南和文章似乎只是循环中的 ajax 请求。例如,有一个基本的 javascript 代码,它每 2 秒从 PHP 文件中获取值并输出到 HTML。据我所知,应该是 COMET 将新值推送到 HTML,因此,循环应该在服务器端,而不是客户端。我的母语文章中有一半使用 setInterval() 并每隔 X 秒联系一次 PHP 文件。

所以,我有一些问题想问你。

  1. 有没有不使用 XAJAX/NOLOH 等外部框架的易于理解的指南或示例?
  2. 在服务器端使用 COMET 或每 X 秒从 ajax.php 请求值之间的性能差异是什么?
  3. 我上面提到的定时请求可以称为COMET吗? (例如 Long Polling using jQuery and PHP)
  4. 我需要任何扩展来运行 COMET 服务器端吗? (我的虚拟主机使用的是 Apache,我个人使用的是 Nginx)

最佳答案

您必须使用客户端脚本 (AJAX),因为必须轮询服务器。服务器不能在没有打开连接的情况下简单地将消息发送到某人的浏览器。我不太熟悉 HTML5 websockets,但我相信这允许您与服务器建立持久连接,但是 HTML5 浏览器并未广泛使用,无法将其用作“公共(public)”网站上的解决方案。

多长时间轮询是从浏览器发送异步请求,超时时间长(比如30秒),当请求到达服务器后,去检查是否有新消息,但是当有现在要显示消息,而不是直接输出结果,它进入无限循环,轮询数据库,例如每秒(使用 sleep 推迟查询),直到找到一条消息。当找到一条消息时,它会终止循环并输出结果。如果 30 秒后没有消息,脚本将超时并发回一个空请求。

因此请求可以在 0 到 30 秒之间发回。一旦请求到达浏览器,它就会被处理并发送一个新的 30 秒请求。

至于你的问题;

  1. 您需要一个客户端框架来进行轮询
  2. 您不能仅在服务器端使用 Comet。在正常轮询(例如每秒轮询一次)上使用长轮询很重要,因为您发出的服务器请求要少得多
  3. 据我了解;是的
  4. 您可以使用任何服务器端语言,只要它可以在查询消息时保持连接打开即可。

另请查看 http://nodejs.org/

关于PHP:长轮询和 Comet 相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9248404/

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