2012-03-24 71 views
7

我一直使用Apache,MySQL和PHP。我想最终分支到Python/Django或Ruby/Ruby on Rails,但这是另一个讨论。关于Apache,MySQL和PHP的两大优点都是无处不在,并且启动一个网站非常简单。只需建立一个Apache虚拟主机,将数据库导入到MySQL中,并将PHP文件复制到服务器上。而已。这是我所做过的和我所知道的所有事情。请记住这一点。LAMP人员如何轻松实现WebSockets?

现在,网站能够实时向用户提供数据变得越来越重要。由于Facebook和Gmail的活跃性,用户也期待这一点。这种效果可以通过Ajax轮询来伪造,但这会产生很多开销,如here所解释的。我想使用WebSockets。现在请记住,我一直是一个LAMP家伙。我只用前面介绍的方法启动了网站。因此,如果我有一个CakePHP站点,我该如何“添加”WebSockets的功能?我是否需要安装其他服务器或其他服务器,或者我能否使用Apache来顺利运行?它需要Apache 2.4吗?请解释这个过程,让我记住我只知道LAMP。谢谢!

回答

4

需要注意的一点是,实时websockets服务器需要“长时间运行”,以便它可以将内容推送到客户端。在经典的LAMP设置中,Apache为每个请求生成一个PHP解释器。请求之间的PHP解释器没有运行,并且请求之间保持的唯一协议状态是会话。

LAMP方式的一个很好的属性是内存管理很简单。您只需隐式分配所需的任何内存,并在请求完成时自动回收,然后PHP进程退出。只要你想让服务器继续运行,你就需要考虑内存管理。在一些语言中,如C++,您可以明确地管理分配和释放。在其他语言中,如Java或Javascript,您有垃圾收集。在PHP中,你可以扔掉所有东西,并在每次请求时重新开始。

我想你会很难用Cake或其他经典的PHP框架来制作长时间运行的服务器。这些框架基本上采用HTTP请求并将其转换为HTTP响应。

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

这个答案出来有点蓬松,但我希望它有助于一点点.. :-)

+0

还检查了https://github.com/davidcoallier/node-php及相关叉。在节点中也有大量的http实现,但这就是节点的美妙之处 - 它不一定是* http。你可以看看其他的实时协议,如rtmp,如果你可以保证客户端的客户端(如闪存,或闪存作为脚本的客户端代理) – frumbert 2012-03-25 21:12:47

+0

p.s.然而,在跳入并确定node.js之前,先解决方案,然后再仔细阅读并解读解决方案的两侧,例如, :http://teddziuba.com/2011/10/node-js-is-cancer.html – frumbert 2012-03-25 21:27:41

相关问题