【问题标题】:PHP & COMET. Need some guidancePHP 和彗星。需要一些指导
【发布时间】:2012-05-13 10:52:07
【问题描述】:

我一直在寻找使用 PHP 制作实时网站。 (彗星)我已经找了很长时间了。 (大约一个月)我什至检查了一些 PHP 聊天脚本并在我的网络服务器上使用,但其中大部分都遇到了一些问题。 (会解释)

到目前为止,大多数人都在说同样的事情:PHP 并不是可以与 COMET 一起使用的最佳语言。聊天/彗星的例子充其量是hacky。

我问这个是因为,我想在我的网站上有一些功能,比如允许登录的人互相聊天。这就是我需要与 PHP 页面建立有效连接的地方。我还计划制作一个基于浏览器的游戏,并且仍然需要一个活跃的连接!

AJAX 是 2 年前罕见的东西,在 Facebook 上大放异彩。现在几乎每个人都在使用它,它成为了 Web 开发的标准。现在,基于 COMET 的网站正在增长。 Youtube、Google+、Facebook、EA 的 Battlelog 等。我相信我应该学习如何使用它。

好的,这是我的问题。 (下面的一些信息是我在谷歌上搜索时收集到的。不确定它们是否正确。)

  1. 像 Python 这样的一些语言有专门为这项工作设计的 Web 服务器。我相信其中之一叫做 Tornado Web Server。开发和配置以模拟数千个活动连接。我相信 Appserv 中没有这样的选项,但有人告诉 NGINX 可以通过一个不错的配置来处理它。这是真的吗?应该做哪些配置?是否有适合这项工作的 PHP 网络服务器?

  2. 一些最建议的事情是:

    一个。使用 APE。

    b.使用 Socket.IO

    c。 Node.js

    有什么方法可以将它们与 PHP 一起使用?哪一个最有前途?你能给他们一些指导吗?除了这些还有别的吗?

  3. 我使用了一个彗星聊天脚本。基本上,您一直在查询数据库,并通过在循环中使用 usleep() 将其休眠,并使用 flush() 将结果输出到浏览器。 (这个变得难以理解,所以我将提供一个快速代码)

    while(true)
    {
        // query database
       // output the result
       // flush the browser
       // sleep for few seconds to lower cpu load 
    }
    

usleep() 函数基本上破坏了我在基于 Windows 的操作系统上的 Web 服务器。在基于 Windows 的操作系统上运行的彗星应用程序上依赖 usleep() 是否正常?我的意思是,有没有办法让 PHP 脚本“休眠”?无论我做什么,WIN 和 UNIX 服务器上的 CPU 负载都会达到 %100。

  1. PHP 在这方面“真的”那么弱吗?我应该放弃 PHP 并专注于其他语言吗?如果是这样,您会建议哪种语言? (那个语言应该是有前途的。比如HTML5加了AS3就没什么用了,JS大放异彩的时候AS3很快就死了。)

  2. 什么是 WebSync?可以和PHP一起使用吗?

请记住,我需要使用 COMET 进行以下应用程序:

  • 一个聊天脚本,登录的玩家可以在其中互相聊天。
  • 基于浏览器的游戏。我在编码时已经使用了 JSON/AJAX 之类的东西,但是要接收对手的步骤,我应该提取数据,因此需要一个活动连接。 (不要想象高级游戏,我说的充其量是象棋之类的游戏。)

如果您能给我一个简短的指导,我将不胜感激。毕竟,自从互联网上有很多随机文章以来,我每天都感到困惑。人们甚至将setInterval() 称为 COMET,所以一团糟。

【问题讨论】:

  • 如果你想做实时应用,我会推荐 node.js :)
  • me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design 对 php 做了一个很好的总结;P
  • 我应该放弃 PHP 吗?你是说一般?当然不。使用它作为您的主要语言是完全可以接受的,同时使用更适合手头任务的其他语言。对于 Comet,请使用实现线程的简单轻量级的东西,并且可以与您网站的数据库通信。
  • 您的帖子中有一些有趣的问题,但“什么是 WebSync”是可以在此处提问之前进行研究的。想知道能不能和PHP一起使用,在网上搜索“WebSync with PHP”:).
  • @tehlulz - 那篇文章很有趣,它提出了一些公平的观点。但我不确定我是否喜欢它尖刻的语气,也不喜欢 cmets 中可预见的发髻大战。难道我们都不能学会尊重彼此的工具吗?

标签: php comet


【解决方案1】:

这里需要澄清一下。您要查找的内容本身并不是特定于语言的。如果您想使用 PHP 实现彗星功能,您将依赖 Web 服务器(例如 Apache)来执行 HTTP 流。您还需要了解,在 HTTP/1.1 之前的 HTTP 版本中不支持此功能。话虽如此,如果您想拥有一个基于事件的非阻塞 Web 服务器,最好按照建议查看 Tornado 和 Node。

【讨论】:

    【解决方案2】:

    Comet 是一种编程技术,它使 Web 服务器无需客户端请求就可以向客户端发送数据 这种技术将产生比经典 AJAX 更具响应性的应用程序 用户必须创建请求(例如通过单击一个链接)或周期性的 AJAX 请求,以便从服务器获取新数据。

    但它会在您的网络服务器上产生大量流量。如果您想在 PHP 中构建聊天应用程序,请使用 pusher,它是第三方服务且易于使用。 这是推送者的链接https://pusher.com/tutorials/realtime_chat_widget

    第二个建议是使用棘轮来创建聊天应用程序。 这是棘轮的链接http://socketo.me/docs/hello-world

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      相关资源
      最近更新 更多