Websockets& PHP

时间:2013-03-05 09:44:01

标签: php node.js websocket

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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()和{{ 1}}。

在上面的链接中有更好的信息,所以只要链接存在就可以关注它。

答案 1 :(得分:0)

  1. 如果你经历过apache,它会遇到同样的瓶颈。这可以通过使用其他Web服务器来解决,例如 lighthttpd nginx 。你根本不需要节点。
  2. PHP没有体面的共享内存使WebSockets的最大优势无可挑剔。如果你不想在用户之间进行交互,它应该正常,但即使这样,我也不得不对PHP的使用不满。 PHP非常适合很多事情,但实时通信不是其中之一。
  3. 您可能需要查看https://github.com/einaros/ws
  4. PHP不是一个好的后端。任何具有执行模型的东西,在其自己的沙箱中都不会一劳永逸,例如节点 .NET C / C ++ Java 是很好的匹配。 PHP适用于短期运行,例如实际网站甚至Web服务 - 但不适用于实时连接。