【发布时间】:2012-05-13 10:52:07
【问题描述】:
我一直在寻找使用 PHP 制作实时网站。 (彗星)我已经找了很长时间了。 (大约一个月)我什至检查了一些 PHP 聊天脚本并在我的网络服务器上使用,但其中大部分都遇到了一些问题。 (会解释)
到目前为止,大多数人都在说同样的事情:PHP 并不是可以与 COMET 一起使用的最佳语言。聊天/彗星的例子充其量是hacky。
我问这个是因为,我想在我的网站上有一些功能,比如允许登录的人互相聊天。这就是我需要与 PHP 页面建立有效连接的地方。我还计划制作一个基于浏览器的游戏,并且仍然需要一个活跃的连接!
AJAX 是 2 年前罕见的东西,在 Facebook 上大放异彩。现在几乎每个人都在使用它,它成为了 Web 开发的标准。现在,基于 COMET 的网站正在增长。 Youtube、Google+、Facebook、EA 的 Battlelog 等。我相信我应该学习如何使用它。
好的,这是我的问题。 (下面的一些信息是我在谷歌上搜索时收集到的。不确定它们是否正确。)
像 Python 这样的一些语言有专门为这项工作设计的 Web 服务器。我相信其中之一叫做 Tornado Web Server。开发和配置以模拟数千个活动连接。我相信 Appserv 中没有这样的选项,但有人告诉 NGINX 可以通过一个不错的配置来处理它。这是真的吗?应该做哪些配置?是否有适合这项工作的 PHP 网络服务器?
-
一些最建议的事情是:
一个。使用 APE。
b.使用 Socket.IO
c。 Node.js
有什么方法可以将它们与 PHP 一起使用?哪一个最有前途?你能给他们一些指导吗?除了这些还有别的吗?
-
我使用了一个彗星聊天脚本。基本上,您一直在查询数据库,并通过在循环中使用 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。
PHP 在这方面“真的”那么弱吗?我应该放弃 PHP 并专注于其他语言吗?如果是这样,您会建议哪种语言? (那个语言应该是有前途的。比如HTML5加了AS3就没什么用了,JS大放异彩的时候AS3很快就死了。)
什么是 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 中可预见的发髻大战。难道我们都不能学会尊重彼此的工具吗?