我应该学习哪种新语言来实现高性能,高并发性,Web开发?

时间:2011-05-12 18:13:27

标签: performance concurrency node.js webserver

到目前为止,我对服务器上只有PHP非常有信心。但是,我有一些额外的时间,我想学习一种新的服务器语言。

我知道PHP与新的公平和线程服务器技术相比有多慢。我一直在调查:

  

NodeJS:用JavaScript编写,编译   并通过谷歌的V8动力   铬。

     

RingoJS:用JavaScript编写,运行   在Mozilla的Rhino Java下   发动机。

     misultin:Erlang,不太了解,但是   似乎超级快:   http://www.ostinelli.net/a-comparison-between-misultin-mochiweb-cowboy-nodejs-and-tornadoweb/

     

mochiweb:Erlang也是如此   被接受为快。

     

龙卷风:基于Python,似乎   成为最慢的。

我想知道我应该学什么语言。如果我使用RingoJS / NodeJS,那么我真的不需要学习。但是,我对Erlang或Python一无所知。如果我的目标是能够构建高端Web服务器(软件/站点),我应该考虑学习吗?

一般而言,哪种语言和图书馆在为高性能网站提供支持方面拥有最光明的未来?当然我可以用C ++完成所有工作,但这似乎很耗时,而且我认为Python和Erlang更容易。

带有线程的ASP.NET看起来很痛苦,所以,我想我会离开它。那么Twisted(Python)呢?还是Eventmachine(Ruby)?

4 个答案:

答案 0 :(得分:7)

  

高性能,高并发性

您将需要一个异步eventloop驱动的HTTP服务器。这是最重要的事情。你甚至可以使用PHP& nginx,但这类似于将ASP.NET与ASyncHTTPRequests一起使用

Mochiweb,misultin,Tornade和node.js都满足于此。

我个人推荐node.js,因为它太棒了!

<强>了Mochiweb:

mochiweb似乎缺乏我能看到的文档。它确实有WebMachine

<强> ringoJS:

对于在node.js上使用ringojs,我无法给你一个好的论据。 node.js社区规模更大,拥有更多支持,更有可能成为稳定的行业领导者。

其他

我还建议使用备用异步Web服务器manos [C#],eventmachine [Ruby]和twisted [Python]。

<强> misultin:

这是非常值得关注的,因为Erlang是一种用于大规模并发的优秀语言,而且它也有合理的文档。

<强>结论

Erlang和node.js的优点是服务器和所有IO本身都是非阻塞的,并且是开箱即用的,因此我会考虑这两个。

如果您希望以高度并发的语言高度扩展服务器,那么选择用Erlang编写的misultin / mochiweb。 Erlang只是在扩展部门获胜。学习Erlang的一个好处就是你学习了功能范例。

如果您想要一个具有活跃增长社区的异步网络服务器,请在pick node.js中进行活跃的第三方库开发。使用节点的一个好处就是您熟悉JavaScript。

答案 1 :(得分:5)

  

如果我使用RingoJS / NodeJS,那么   我真的不需要   学习。 ...如果我的目标是能够构建高端Web服务器(软件/站点),我应该考虑学习吗?

我想说在软件工程中没有nothing I actually need to learn这样的东西。即使有人熟悉世界前端的JS,你也需要学习很多东西和技术来构建高质量的服务器端。如果您选择非JS框架,那么您将需要投入更多时间来掌握其他语言。例如,就语法糖而言,每种语言都可以提供特定的优势,但我认为你应该坚持最适合你的语言。

  

一般来说,哪种语言和库   有最光明的未来   为高性能网站提供支持?

我认为对这个问题的回答是非常主观的。 Node.js在实时网络和可扩展的网络程序中逐渐受到欢迎和吸引力,但很难说“一般”未来的位置。

  带有线程的ASP.NET似乎很痛苦,   所以,我想我会离开它。

您可以尝试查看manos这类似于.NET世界的node.js。

  

那么Twisted(Python)呢?要么   Eventmachine(Ruby)?

我在Python和Ruby中都没有经验,但我建议你听these two播客。

答案 2 :(得分:4)

Google的Go值得考虑。它是干净且富有表现力的代码,具有内置的并发性和可与C相媲美的性能。

这是Go的网络问候世界:

package main

import (
    "fmt"
    "http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

修改

Haskell也值得一提。它是一种纯函数式语言,benchmarks非常好。但是像大多数语言一样,很容易遇到同步库。

缺少同步库是node.js

的最佳部分之一

答案 3 :(得分:2)

尝试Python + Pyramid,它比Tornado更强大。 使用这一对,您将编写快速且非常小的代码。