Websockets和PHP

我开始考虑使用websockets作为在我正在调试的新构建
PHP应用程序中替换长轮询的解决方案.

我有几个问题,我想知道人们是否可以帮助我.

> Nodejs服务器可以调用PHP吗?如果它确实不会,它会遇到与连接方面的Apache相同的缺点吗?我们都知道nodejs是非阻塞的,Apache等不是,但是如果Nodejs只是调用PHP服务器,那么它自己的程序会不会以类似的方式瓶颈?
> PHP和websockets是否匹配良好?
>除了socketio有什么好的js库,显然只适用于Nodejs?
>有没有人找到一个很好的教程,使用websockets和PHP后端可能使用类似Ratchet PHP库的东西,这可能会帮助我开始我的方式?

我们非常感谢您的想法.

最佳答案 请原谅我对你的问题的解释.

1:Node.js可以调用PHP,并且不会有与Apache相同的缺点吗?

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

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

2:PHP和WebSockets是否匹配良好?

传统的PHP脚本通常用于每个请求运行一次.绝大多数PHP开发人员不熟悉事件驱动开发,而PHP本身(尚未)支持异步处理.

PHP是一种快速,成熟的脚本语言,只是变得更快,即使有很多瑕疵和缺点. (有人说它的弱打字是一个缺点.其他人说这是一个缺点,它的打字不够弱.)

也就是说,任何语言实现WebSockets所需的最小值是能够打开基本TCP端口并监听请求.对于PHP,它是作为C套接字库的瘦包装器实现的,并且还有其他扩展和框架可用,它们也可以改变使用PHP在TCP套接字中工作的感觉.

PHP的垃圾收集器也已经成熟.内存泄漏要么是因为完全无视内存空间(我正在看着你,Zend Framework),要么是开发人员故意破坏垃圾收集系统,因为开发人员认为他们很聪明或者想要证明打败它是多么容易GC. (剧透:如果你知道细节,那么每种语言都很容易!)

在PHP中设置守护进程(长时间运行的后台进程)是非常可能和非常容易的.它甚至可以使其表现良好,足以优雅地重新启动并将其连接关闭到相同脚本的新版本,甚至是运行不同版本的PHP的同一服务器上的相同脚本,尽管这已经超出了范围一点点.

至于它是否是一个很好的匹配,这完全取决于开发人员.您是否愿意,能够和乐于使用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().

但是,在上面的链接中有更好的信息,因此只要链接存在,就可以按照它进行操作.

点赞