websockets 是不是适合与 PHP 一起使用?

Posted

技术标签:

【中文标题】websockets 是不是适合与 PHP 一起使用?【英文标题】:Are websockets suitable for use with PHP?websockets 是否适合与 PHP 一起使用? 【发布时间】:2012-07-09 04:12:47 【问题描述】:

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

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

【问题讨论】:

您可能有兴趣阅读有关 NodeJS 和 socket.io 的信息。这取决于你的项目,但它可能会给你你需要的东西:nodejs.orgsocket.io 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

php-fpm 怎么样?而php7采用JIT技术?这个答案应该更新。

以上是关于websockets 是不是适合与 PHP 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

将 websockets 与 PHP 和 MySQL 脚本一起使用的最佳方式是啥? [关闭]

WebSocket 不适用于 https 请求,并且它与使用 PHP 棘轮库的 http 一起正常工作

Azure 服务总线通知中心是不是与 websockets 和 javascript 一起使用?

将 Websocket 与 Tomcat 一起使用

XMPP 服务器 MongooseIM 是不是可以与 BOSH 或 WebSocket 一起使用?

如何使 php 与 postgresql 一起工作?