14

我已经在互联网上的各个地方看到它提到 HTML5 websockets 不能很好地与 PHP 一起使用,PHP 本质上只适合与它们一起使用。另一方面,我看到多个关于使用 PHP 和 websockets 的教程,我注意到一些 PHP websocket 实现,例如http://code.google.com/p/phpwebsocket/

那么有没有人有任何关于在 PHP 中使用 websockets 的确切信息。它们是否可以与 PHP 一起使用,与 Java 或 Python 相比,它们与 PHP 一起使用的优点/缺点是什么,为什么我读到很多人说它们不能很好地协同工作?

4

2 回答 2

9

问题是 WebSockets 是为长时间运行的线程/进程设计的,每个线程/进程都维护多个事件驱动的连接,而 PHP(以及它的 Apache 队列)是围绕短暂的单进程程序范式设计的(例如max_execution_time,通常设置为 30 秒,并且会话是单线程的)。

这并不是说用 PHP 编写 WebSockets 服务器实现是不可能的。我知道至少有一个项目确实做到了这一点(但请注意,即使这个示例也是从命令行运行的,而不是通过mod_php. 但是很可能 WebSockets 的 PHP 实现与 PHP 最常用的廉价/共享主机的设置不兼容。

因此,虽然它可以在 PHP 中实现,但无论如何您最终都必须运行一个单独的服务器进程(来自 Apache),如果您使用的是允许单独的服务器进程的托管,那么编写 WebSockets 代码就更容易了专为事件驱动编程而设计。

如果您不打算为数以万计的并发双工连接提供服务,那么最好将 AJAX 和SSE与 PHP 后端结合使用。

于 2012-07-09T19:25:40.703 回答
-1

我最近尝试了 phpwebsocket,但此时它不起作用(php 5.4 和 chrome)代码指的是握手中的第二个密钥,该密钥在 rev 中不存在。websocket 协议的 13 我没有时间阅读 RFC 以了解这是怎么回事。

可以肯定的是,这个解决方案比长轮询的 AJAX 更优雅和反应灵敏,但 websockets 目前不稳定,我认为等待 w3c 宣布它稳定会更有趣。

于 2012-07-12T13:39:51.520 回答