我已经在互联网的各个地方看到它提到HTML5 websockets不能很好地与PHP一起工作,PHP的本质只适合与它们一起使用。另一方面,我看到有关使用PHP和websockets的多个教程,我已经注意到一些PHP websocket实现,例如http://code.google.com/p/phpwebsocket/
所有人都有关于使用带有PHP的websockets的任何确切信息。它们是否可以与PHP一起使用,与Java或Python相比,使用它们的优点/缺点是什么?为什么我会读到很多人说它们不能很好地协同工作?
答案 0 :(得分:7)
问题在于WebSockets是为长时间运行的线程/进程设计的,每个线程/进程都维护着多个事件驱动的连接,而PHP(以及它的Apache队列)是围绕短期单进程程序范例设计的(例如{{3会话是单线程的。)
这并不是说用PHP编写WebSockets服务器实现是不可能的。我知道至少有一个项目存在max_execution_time
is commonly set to 30 seconds(但请注意,即使这个示例也是从命令行运行,而不是通过mod_php
运行)。但是,WebSockets的PHP实现很可能与PHP最常用的廉价/共享托管的设置不兼容。
因此虽然它可以在PHP中使用,但最终还是必须运行一个单独的服务器进程(来自Apache),如果你正在使用允许单独服务器进程的托管类型,那么编写WebSockets代码会更容易用于事件驱动编程的东西。
如果您不打算提供数万个并发双工连接,那么您可能最好将AJAX和done exactly this与PHP后端结合使用。
答案 1 :(得分:0)
我最近尝试过phpwebsocket并且它此时不起作用(php 5.4和chrome)代码指的是握手中的第二个密钥,它不存在于rev中。 websocket协议中的13个我没有时间阅读RFC以了解问题所在。
可以确定这个解决方案比使用长轮询的AJAX更优雅和更具反应性但是此时websockets不稳定我认为等待w3c宣布它稳定会更有趣。