LAMP Guy如何轻松实现WebSockets?

时间:2012-03-24 16:35:27

标签: php websocket

我一直在使用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 个答案:

答案 0 :(得分:4)

需要记住的一件事是,实时的websockets服务器需要“长时间运行”,这样才能将内容推送给客户端。在经典的LAMP设置中,Apache为每个请求生成一个PHP解释器。在请求之间,PHP解释器没有运行,请求之间保持的唯一协议状态是会话。

LAMP方式的一个不错的特性是内存管理很容易。您只需隐式分配所需的内存,并在请求完成后自动回收,并退出PHP进程。只要您希望服务器继续运行,就需要考虑内存管理。在某些语言中,如C ++,您可以明确地管理分配和释放。在其他语言中,如Java或Javascript,您有垃圾收集。在PHP中,你抛弃一切,并在每个请求上以新鲜的石板开始。

我认为使用Cake或任何其他经典PHP框架制作长时间运行的服务器会很困难。这些框架的工作原理是基本上接受HTTP请求并将其转换为HTTP响应。

我的建议是你应该研究Node.JS和SocketIO之类的东西。如果您了解Javascript,或者不介意学习,这些技术可以让您轻松实现实时服务器和客户端。如果有必要,你可以运行像nginx这样的反向代理,这样你现有的LAMP堆栈就会得到一些请求,而一个或多个NodeJS服务器会得到一些。

这个答案有点蓬松,但我希望它有点帮助......: - )