使用Scala还是Python构建支持PHP应用的Comet服务器?

2 投票
2 回答
796 浏览
提问于 2025-04-16 04:27

我现在有一个正在运行的PHP应用程序,我想添加实时信息流(比如谷歌搜索最新结果的流)。我在PHP中实现了以下步骤:

  1. 向服务器发送一个AJAX请求。
  2. 服务器用PHP响应。
  3. 在15000毫秒(15秒)后,使用setTimeout()重复以上步骤。

我知道这样会给服务器带来很大的负担,还会导致C10K问题。

经过研究,我发现作为Apache2模块的PHP不适合实现Comet解决方案,这真是太遗憾了!

我有两个选择,要么使用Scala,要么使用Python来实现我网站的这一部分,因为其他部分已经完成,没有时间重写。

我最关心的是性能,因为我使用的是来自ServerGrove的VPS200,我打算和PHP一起安装JVM或Python。

所以你觉得在这种情况下,使用Scala的JVM还是Python更省内存/CPU呢?

谢谢!

更新:我想我会使用Akka项目,我打算测试一下。

更新2:我已经使用Node.js完成了这个,它在学习曲线、社区支持和项目成熟度方面是无与伦比的(这是我的个人看法)。而且我在Scala上有过不太好的经历,因为我给了Scala很长时间的机会,才尝试了Node.js。

2 个回答

2

使用Scala和Lift(lliftweb.org)可以让你的程序在性能上有更好的表现。Lift对Comet的支持非常出色。不过,建议你还是先做一个小的试验,测试一下这两者的表现,然后再进行比较。

4

为什么不选择node.js呢?它在处理COMET方面的表现非常好,大家都知道Plurk的成功故事——这是亚洲最受欢迎的社交网站之一,拥有超过5亿的用户,其中有20万用户是同时在线的(使用COMET的长轮询连接)。与基于Java应用服务器的COMET解决方案(Jetty/Netty)相比,node.js的内存使用效率要好得多,差不多少了10倍。

如果你最终想使用Java或Scala,首先可以看看Atmosphere框架。现在它的功能最为丰富(支持各种COMET策略 + WebSocket + Servlet 3.0);它还提供了开箱即用的REST支持,基于Jersey(JAX-RS规范的实现);另外还有与Akka的集成(这是一个非常强大的演员模型实现,支持容错、软件事务内存、远程调用等功能,使用Scala编写)。

如果选择Lift框架,你可能需要完全重写你的应用程序,尽管它对COMET的支持非常好。

撰写回答