Websockets和PHP

我开始考虑websockets作为一个解决scheme来取代我正在试运行的新版本PHP应用程序中的长轮询。

我有几个问题,我想知道人们能否帮助我。

  1. 一个Nodejs服务器可以调用PHP,如果这样做不会像刚刚通过Apache一样在连接方面遭受同样的缺点? 我们都知道nodejs是非阻塞的,Apache等不是,但是如果Nodejs只是在自己的程序中调用一个PHP服务器,那么这不是一个类似的方式吗?
  2. PHP和websockets是一个很好的匹配?
  3. 除了socketio之外,还有什么好的js库,显然只能和Nodejs一起使用?
  4. 有没有人发现一个很好的教程,使用websockets和PHP后端也许使用像棘轮PHP库,可能会帮助我的方式吗?

想法将非常感激。

请原谅我的解释你的问题。

1: Node.js是否可以调用PHP,不会有和Apache一样的缺点?

调用一次运行一次的PHP脚本与调用一个网页具有相同的一般缺点,除了要删除一个额外的处理层。 Apache或任何Web服务器本身是一个如此薄的层,虽然你会节省一些时间,节省将是微不足道的。

如果PHP比Node.js更有效地为客户收集数据,无论出于何种原因,那么在您的应用程序中包含PHP可能是明智的。

2: PHP和WebSockets是否匹配?

传统的PHP脚本通常打算每个请求运行一次。 绝大多数PHP开发人员不熟悉事件驱动的开发,而PHP本身还不支持asynchronous处理。

PHP是一种快速,成熟的脚本语言,即使其所有的瑕疵和缺点也只会变得更快。 (有人说,弱打字是一个缺点,有些则认为打字不够弱是一个缺点。)

也就是说,任何语言实现WebSockets所需的最低限度是打开一个基本的TCP端口并监听请求的能力。 对于PHP来说,它是作为C套接字库的一个简单的包装来实现的,还有其他的扩展和框架可以改变在PHP中使用TCP套接字的感觉。

PHP的垃圾收集器也已经成熟。 内存泄漏来自于对内存空间的严重漠视(我在看你,Zend Framework),或者来自开发者故意破坏垃圾收集系统的人,他们认为他们聪明或者想要certificate它是多么容易击败GC。 (剧透:如果你知道细节,那么每种语言都很容易!)

在PHP中设置一个守护进程(长时间运行的后台进程)是非常有可能的。 甚至有可能使它正常运行,以适当的方式重新启动,并将其连接切换到相同脚本的新版本,甚至是运行不同版本PHP的同一服务器上的相同脚本,尽pipe这仅仅是一个范围微小的一点点。

至于这是否合适, 那完全取决于开发者 。 你是否愿意,能够和高兴地使用PHP来编写WebSockets服务器,或使用现有的服务器之一? 是? 那么你是一个很好的匹配PHP和WebSockets。

3: 用于WebSockets的JS库

我真的没有研究过它们。

4: 使用PHP和Websockets的教程

我个人喜欢这个教程: http : //www.phpbuilder.com/articles/application-architecture/optimization/creating-real-time-applications-with-php-and-websockets.html

虽然我有很好的权威性,那个教程的细节很快就会被这个特定的WebSockets服务器所淘汰。 (虽然这个服务器仍然会有一个主动维护的传统分支)。

在链接腐烂的情况下:

使用PHP-Websockets服务器(在Github上可用,将尽快提供),扩展基础WebSocketServer抽象类并实现抽象方法process()connected()closed()

上面的链接中有很多更好的信息,只要链接存在就可以遵循。

  1. 如果你通过Apache,它会遇到同样的瓶颈。 这可以通过使用不同的Web服务器,如lighthttpdnginx来弥补。 根本不需要节点。
  2. PHP没有像样的共享内存使得WebSockets无关紧要的最大优点。 如果你不想在用户之间进行交互的话,它应该是足够体面的 ,但即使如此,我也不得不对PHP的使用感到沮丧。 PHP对很多事情都很好,但是实时通信不是其中之一。
  3. 你可能想看看https://github.com/einaros/ws
  4. PHP不是一个好的后端。 任何在其自己的沙箱中不能“随意运行”的执行模型(比如Node.NETC / C ++Java)都是很好的匹配。 PHP适用于短期运行的执行,比如实际的网站,甚至是web服务 – 但不是实时的连接。