PHP&彗星。需要一些指导

时间:2012-05-03 21:29:54

标签: php comet

我一直在寻找使用PHP制作实时网站。 (COMET)我已经找了很长时间了。 (大约一个月)我甚至检查了一些PHP聊天脚本并在我的网络服务器上使用,但我在大多数问题上遇到了一些问题。 (将被解释)

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

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

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

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

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

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

    一个。使用APE。

    湾使用Socket.IO

    ℃。 Node.js的

    我们有什么办法可以在PHP中使用它们吗?哪一个最有希望?你能给他们一些指导吗?除此之外还有什么吗?

  3. 我使用过彗星聊天脚本。基本上,你一直在查询数据库,并通过在循环中使用usleep()将它与flush()一起输出到浏览器。 (这个很难理解,所以我会提供一个快速的代码)

    while(true)
    {
        // query database
       // output the result
       // flush the browser
       // sleep for few seconds to lower cpu load 
    }
    
  4. usleep()函数基本上在基于Windows的操作系统上销毁了我的Web服务器。在基于Windows的操作系统上运行的彗星应用程序上依赖usleep()是否正常?我的意思是,有没有办法“睡眠”PHP脚本?无论我做什么,WIN和UNIX服务器上的CPU负载都会达到%100。

    1. 这个领域的PHP“真的”弱吗?我应该放弃PHP并专注于其他语言吗?如果是这样,你会建议哪种语言? (那种语言应该是有前途的。例如,在添加HTML5之后没有太多使用AS3,而且当JS闪耀时,AS3更有可能很快死亡。)

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

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

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

      如果你能给我一个简短的指导,我将不胜感激。毕竟,由于互联网上有很多随机文章,我每天都感到困惑。人们甚至将setInterval()称为COMET,因此它完全混乱。

2 个答案:

答案 0 :(得分:1)

这里需要澄清一些。您正在寻找的不是语言本身。如果您想通过PHP实现彗星功能,那么您将依靠Web服务器(例如Apache)来进行HTTP流式传输。此外,您还需要了解HTTP / 1.1之前的HTTP版本不支持此功能。话虽如此,如果您想要一个基于非阻塞事件的Web服务器,您最好按照建议查看Tornado和Node。

答案 1 :(得分:0)

Comet是一种编程技术,它使Web服务器能够将数据发送到客户端,而无需客户端请求它。此技术将生成比经典AJAX更具响应性的应用程序用户必须创建请求(例如通过单击链接)或定期的AJAX请求必须发生才能从服务器获取新数据。

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

的链接

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

的链接

我希望它能帮到你