Websockets适合与PHP一起使用吗?

14

在互联网上的各个地方都提到过HTML5 websockets与PHP不兼容,因为PHP的本质并不适用于它们。另一方面,我看到了多个使用PHP与websockets的教程,还注意到了一些PHP websocket实现,例如http://code.google.com/p/phpwebsocket/

那么,有没有关于使用PHP的websockets的明确信息呢? 它们是否可用于PHP,与Java或Python相比,在使用它们与PHP时的优缺点是什么,以及为什么我读到很多人说它们不能很好地共同使用?


2
你可能会对阅读有关NodeJS和socket.io的内容感兴趣。这取决于你的项目,但它可能会给你所需的东西:nodejs.org socket.io - imperium2335
2个回答

9
问题在于WebSockets是为长时间运行的线程/进程设计的,每个线程/进程维护多个事件驱动连接,而PHP(及其Apache同伴)是围绕短暂的单个进程过程式范例设计的(例如:{{link1:max_execution_time通常设置为30秒}},并且会话是单线程的)。
这并不意味着在PHP中不可能编写WebSockets服务器实现。我知道至少有一个项目已经做到了这一点(但请注意,即使这个例子是从命令行运行的,而不是通过mod_php)。但是,PHP实现WebSockets很可能与便宜/共享主机的设置不兼容。
因此,虽然在PHP中可以做到这一点,但最终你还是需要运行一个单独的服务器进程(从Apache中),如果你使用的是允许单独服务器进程的托管,则更容易在设计为事件驱动编程的其他编程语言中编写WebSockets代码。
如果您不打算提供数万个并发双工连接,则最好使用 AJAX 和 SSE 与您的 PHP 后端相结合。

PHP-FPM怎么样?还有带JIT技术的PHP7呢?这个答案需要更新。 - LeonanCarvalho

-1

我最近尝试了phpwebsocket,但它在这个时候不起作用(php 5.4和chrome),代码引用握手中不存在于websocket协议rev.13的secondkey。我没有时间阅读RFC以理解问题所在。

这种解决方案比使用长轮询的AJAX更优雅、响应更快,但是目前websocket并不稳定。我认为等待w3c宣布其稳定性会更有意义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接