LAMP 专家如何轻松实现 WebSockets?
Posted
技术标签:
【中文标题】LAMP 专家如何轻松实现 WebSockets?【英文标题】:How Can a LAMP Guy Easily Implement WebSockets? 【发布时间】:2012-03-24 16:35:27 【问题描述】:我一直使用 Apache、mysql 和 php。我想最终扩展到 Python/Django 或 Ruby/Ruby on Rails,但这是另一个讨论。关于 Apache、MySQL 和 PHP 的两个优点都是无处不在的,而且很容易启动一个网站。只需设置一个 Apache 虚拟主机,将数据库导入 MySQL,然后将 PHP 文件复制到服务器上。就是这样。这就是我所做的一切,也是我所知道的一切。请记住这一点。
如今,网站能够实时向用户提供数据变得越来越重要。由于 Facebook 和 Gmail 的实时性,用户也期待这一点。这种效果可以通过 Ajax 轮询来伪造,但这会产生很多开销,正如 here 所解释的那样。我想使用 WebSockets。现在请记住,我一直是一个 LAMP 人。我只使用我之前描述的方法启动过网站。因此,如果我有一个 CakePHP 站点,我该如何“添加”WebSockets 的特性呢?我是否需要安装其他服务器或其他东西,或者我可以让它与 Apache 一起顺利工作?它需要 Apache 2.4 吗?请向我解释这个过程,记住我只知道 LAMP。谢谢!
【问题讨论】:
【参考方案1】:要记住的一个关键点是,实时 websockets 服务器需要“长时间运行”,以便它可以将内容推送到客户端。在经典的 LAMP 设置中,Apache 在每个请求上生成一个 PHP 解释器。在请求之间,PHP 解释器没有运行,请求之间保持的唯一协议状态是会话。
LAMP 方式的一个很好的特性是内存管理很容易。您只需隐式分配所需的任何内存,并在请求完成时自动回收,并且 PHP 进程退出。只要您希望服务器继续运行,就需要考虑内存管理。在某些语言中,例如 C++,您显式地管理分配和解除分配。在其他语言中,如 Java 或 javascript,你有垃圾收集。在 PHP 中,您将所有内容都扔掉,并从每个请求的新页面开始。
我认为您将很难使用像 Cake 或任何其他经典 PHP 框架这样的东西来制作长时间运行的服务器。这些框架的工作原理基本上是接受一个 HTTP 请求并将其转换为一个 HTTP 响应。
我的建议是你应该研究一下 Node.JS 和 SocketIO 之类的东西。如果您了解 Javascript,或者不介意学习,这些技术可以让您轻松实现实时服务器和客户端。如有必要,您可以运行像 nginx 这样的反向代理,这样您现有的 LAMP 堆栈就会收到一些请求,而一个或多个 NodeJS 服务器会收到一些请求。
这个答案有点蓬松,但我希望它有点帮助.. :-)
【讨论】:
还可以查看github.com/davidcoallier/node-php 和相关的分叉。 node 中也有大量的 http 实现,但这就是 node 的美妙之处——它不必必须是 http。如果您可以保证客户端的消费者(例如 flash 或 flash 作为脚本的客户端代理),您可能可以查看其他实时协议,例如 rtmp以上是关于LAMP 专家如何轻松实现 WebSockets?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有 Bitnami LAMP Stack 的 mozilla 执行脚本 Perl?