Erlang应用程序需要暴露出来Web Service接口,你该如何处理?需要做复杂点的页面展现你又将如何选择?不同规模解决方案解决不同规模的问题,这里的问题其实是你要选择哪个Web Server,你要选择哪个Web Framework?

 

Erlang Web Servers 

   

 现在(2012-10-27)还处于活跃开发状态的Web Server有:Mochiweb Yaws Cowboy

 

Mochiweb 

 

   一句话介绍: MochiWeb is an Erlang library for building lightweight HTTP servers.

   

    Mochiweb在Erlang项目中被当做一个Web组件被广泛使用(比如RabbitMQ的plug-in),它的设计相当收敛,除了基础的Web请求处理没有提供特别复杂的功能集(后面会提到其它Web Server).目前我已经在两个项目中使用了Mochiweb,得心应手.

   Mochiweb项目代码有很多值得学习的地方,比如 mochiglobal [ 链接 ],Parameterized module [链接]今年夏天我把Mochiweb代码打印了一份,看得很是过瘾.这里有一篇实战风格的入门文章:A practical introduction to MochiWeb - Alex Marandon[链接]

   使用Rebar很容易编译运行,里面自带一个简单的Echo demo,你可以使用Rebar快速建立起来自己的站点框架,动手试试吧

   

  项目地址:https://github.com/mochi/mochiweb

 

Cowboy

   

   一句话介绍: Cowboy is a small, fast and modular HTTP server written in Erlang.

   使用Cowboy需要通过编写Handler来定制如何处理Web请求.这是它设计上的一大特色.项目源码自带了N种版本的hello_world,也是可以非常快上手.编译运行依然是rebar搞定,这个项目现在保持更新,每天都能收到github推送的代码变更邮件. 

  项目地址:https://github.com/extend/cowboy

 

YAWS 

 

  一句话介绍:Yaws is a HTTP high perfomance 1.1 webserver particularly well suited for dynamic-content web applications.

  这个略显怪异的名字是Yet another Webserver的缩写.其提供的已经不是简单的脚手架了,而是支持动态内容输出,REST,文件上传SOAP等等.在其官网上有丰富的文档和样例代码.O'Reilly在2012年6月出版的 Building Web Applications with Erlang 一书中使用的就是YAWS.这本不足150页的小册子是很好的YAWS入门教程.估计国内出版社不会引进这样一本冷冷的书,自己找电子版读吧,很容易找到. 

 项目地址:http://yaws.hyber.org/

 

Misultin [停止更新]

 

  一句话介绍: Misultin development has been discontinued. 

  是的,这个项目已经不再继续更新了;停止更新的原因是作者认为各个Web server项目有"too much duplication of efforts".作者在项目介绍中倒是简单评价了Mochiweb和Cowboy:


  Mochiweb has been around the block for a while and it's proven solid in production, I can only recommend it for all basic webserver needs you might have. Cowboy has a very interesting approach since it allows to use multiple TCP and UDP protocols on top of a common acceptor pool. It is a very modern approach, is very actively maintained and many projects are starting to be built around it.  

 

项目地址:https://github.com/ostinelli/misultin

 

 

  看过Misultin作者的一番评论,其实可以回答不少人关于"用Mochiweb做Web项目很痛苦"的问题:如果你要做一个丰富多彩的Web站点,在Mochiweb提供的脚手架上,你要完成很多工作,显然你需要其它选择,呃,或许你需要选择一个Web Framework了.对于大多数框架来说,其设计的总要目标就是开发效率和常见应用场景的支持.我们看看有哪些Erlang Web Framework可用吧!

 

Elrang Web Frameworks

  

   除了Asp.net MVC,RoR之外,其实还有很多Web Framework可用,看看Erlang世界里面的解决方案吧:

 

ChicagoBoss

 

  一句话介绍:Chicago Boss is a server framework inspired by Rails and written in Erlang.

 

  ChicagoBoss是现在非常活跃的Erlang Web Framework,在各种细节上都为新手准备的相当周到比如60秒快速上手教程什么的.甚至它说自己区别于其它Erlang Web Framework的就是" it is easy to set up and use."它之间Web Server是选择的Misultin现在已经迁移到Cowboy.前端MVC架构,内置消息队列BOSSMQ,数据存储方面选择性也比较多:Mnesia MongoDB Mysql PostgreSQL Riak ,Tokyo Tyrant;模板方案依然是使用ErlyDTL. 

  另外,我觉得ChicagoBoss的文案是这些项目里面写的最棒的,直接命中你最想知道的两个问题:

  "Chicago Boss is a server framework inspired by Rails and written in Erlang. It offers all the conveniences of modern web development, including Comet. What sets Chicago Boss apart from other non-Erlang frameworks is that it can handle large amounts of traffic without any drop in performance. What sets Chicago Boss apart from other Erlang frameworks is that it is easy to set up and use."

 

 项目地址:https://github.com/evanmiller/ChicagoBoss

 入门PDF: http://www.evanmiller.org/chicago-boss-tutorial.pdf

 

Nitrogen 
 

   一句话介绍:Nitrogen Web Framework is the fastest way to develop interactive web applications in full-stack Erlang.

   看群里面讨论,采用Nitrogen的项目也不在少数,这个项目动态模板方案不是采用ErlyDTL,而是自己有一套解决方案Nitrogen records [链接].网站上的例程和Step by Step教程足够详细,入门应该比较快.

 

   项目地址:http://nitrogenproject.com/

 

Zotontic

  一句话介绍:Zotonic is the open source, high speed, real-time web framework  and content management system, built with Erlang.

   应该说Zotontic和其它框架的差异更多是在业务定位上了,提供了很多CMS直接可用的功能,查看其features列表能够看到详细介绍,注意:"Typically 10 times (and much more) faster than PHP content management systems." [链接]

   Zotontic构建在Mochiweb和PostgreSQL之上.

 

 项目地址:http://zotonic.com/

 

BeepBeep

 

  一句话介绍: BeepBeep is a simple web application framework for Mochiweb inspired by Rails and Merb

  BeepBeep 构建在 MochiWeb 和 ErlyDTL (后面会介绍) 基础之上. 沿袭了mochiweb的优良传统一键建站,基于ErlyDTL提供Django 模板的视图展现.

   这个项目已经09年之后就没有实质性的更新,最近一次更新是2010年更新了一下README,慎重选择吧.

   还有一个项目ErlyWeb同样是

项目地址:https://github.com/davebryson/beepbeep

 

 

ErlyWeb

 

  一句话介绍: ErlyWeb is a web development framework for Erlang. It lets you quickly and easily build database-driven webapps following the MVC pattern.

   这个项目也不多说了,已经5,6年没有更新了,可惜了这个霸气外露的名字了.

 

 项目地址: https://github.com/yariv/erlyweb

 

 

更多资料

 

  ChicagoBoss 项目组为上面的Web Framework做了一个详细的比较,技术选型的时候,这个太有用了:

https://github.com/evanmiller/ChicagoBoss/wiki/Comparison-of-Erlang-Web-Frameworks 

还有一篇比较的文章:

A comparison between Misultin, Mochiweb, Cowboy, NodeJS and Tornadoweb
http://www.ostinelli.net/a-comparison-between-misultin-mochiweb-cowboy-nodejs-and-tornadoweb/

Stackoverflow上还有一篇讨论:

http://stackoverflow.com/questions/1822518/current-state-of-erlang-web-development-frameworks-template-languages

 

Erlang Boss
 
http://www.evanmiller.org/chicago-boss-guide.html
 
 
Video Tutorial To Start Developing Web Applications on Erlang
 

 

番外篇 - ErlyDTL

 

 上面反复提到ErlyDTL,必须介绍一下,这也是一个基础项目被广泛使用,延续上面的模式:

 

 一句话介绍:ErlyDTL is an Erlang implementation of the Django Template Language.

 

 

Template file welcome.html:

  Welcome back, {{ name }}!

   You have {{ friends|length }} friends: {{ friends|join:", " }}

   Have some primes:
   {# this is exciting #}
   {% for i in primes %}
      {{ i }}
   {% endfor %}

Erlang code:

 erlydtl:compile("/path/to/welcome.html", welcome_template),
   welcome_template:render([
       {name, "Johnny"},
       {friends, [<<"Frankie Lee">>, <<"Judas Priest">>]},
       {primes, [1, 2, "3", <<"5">>]}
   ]).

Result:

 Welcome back, Johnny!

   You have 2 friends: Frankie Lee, Judas Priest

   Have some primes:
   1
   2
   3
   5

  项目地址:http://github.com/evanmiller/erlydtl 这个项目给我的启示很多,其实有更多可能性,不仅仅是用在Web项目里面,后面有时间专门说它.

 

 各位,晚安! 送上小图一张,周末愉快!