yaws mysql_[Erlang 0082] Erlang Web Servers & Frameworks

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快速建立起来自己的站点框架,动手试试吧

Cowboy

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

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

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入门教程.估计国内出版社不会引进这样一本冷冷的书,自己找电子版读吧,很容易找到.

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.

看过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."

Nitrogen

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

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

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之上.

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同样是

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年没有更新了,可惜了这个霸气外露的名字了.

更多资料

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

还有一篇比较的文章:

Stackoverflow上还有一篇讨论:

番外篇 - ErlyDTL

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

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

Template file welcome.html:

69c5a8ac3fa60e0848d784a6dd461da6.png

Welcome back, {{ name }}!

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

Have some primes:

{# this is exciting #}

{% for i in primes %}

{{ i }}

{% endfor %}

69c5a8ac3fa60e0848d784a6dd461da6.png

Erlang code:

erlydtl:compile("/path/to/welcome.html", welcome_template),

welcome_template:render([

{name,"Johnny"},

{friends, [<>, <>]},

{primes, [1, 2, "3", <>]}

]).

Result:

69c5a8ac3fa60e0848d784a6dd461da6.png

Welcome back, Johnny!You have2friends: Frankie Lee, Judas Priest

Have some primes:1

2

3

5

69c5a8ac3fa60e0848d784a6dd461da6.png

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

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

910d27916bd1c9f4261c44cb63bb457a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值