Erlang 与 Web 开发(转)

问题描述

Erlang 语言的很多特性,决定了它开发服务器端(**)的程序极其地方便,故此,基于 Erlang 的各种服务应用正雨后春笋般涌现。这里我们就大家最熟悉的 Web 开发展开话题。考虑到 Erlang 并不广为人知,这里以脱盲为主,如果某个话题引起你的兴趣,建议你参考相关文档继续深入下去。有任何希望讨论的地方,可以在 erlang-china 或 ecug 这两个 google groups 中讨论。本文重点介绍的是 Yaws 和 MochiWeb,其他内容做概要介绍。**Erlang****编译与安装**下载 Erlangwget **://erlang.org/download/otp_src_R12B-2.tar.gz安装 bison, flex, openssl, ncursessudo apt-get install bisonsudo apt-get install flexsudo apt-get install libssl-devsudo apt-get install ncurses-dev编译 erlang/otptar zxvf otp_src_R12B-2.tar.gzcd otp_src_R12B-2./configuresudo make install**Inets **d**之所以首先介绍 Inets **d 服务器,是因为这是 Erlang OTP 自带的 Web **。我们知道 Erlang OTP 是一个平台,而不止是一个语言。它带有很多**用的小工具,多数情况下这些工具以 Web 方式提供。而这些工具通常是基于 Inets **d 的。用Inets **d你会觉得和Apache有点象。确实如此。我曾经写了一篇文章介绍 Inets **d,这里不在重复,欲了解请参阅:**://erlana.googlecode.com/svn/trunk/doc/Erlang%20Inets/。**Yaws**Yaws(**://yaws.hyber.org/)是目前通 用 Erlang Web ** 中最为名声显赫的一个,也是文档最为丰富的一个。Yaws 本身带的文档和样例都很详细,我这里另辟蹊径,将 Yaws 和我们通常所说的 LAMP (Linux + Apache + MySQL + PHP)作为比照,来一个 LYMP (Linux + Yaws + MySQL + PHP)开发。需要说明的是,LYMP 并不是 Yaws 最为推崇的开发模式,只是因为它是大家最为熟悉的一条路子。其实 Yaws 本身和 Inets **d 一样的思路,它倾向于一切都使用 Erlang 语言,即 LYME(Linux + Yaws + Mnesia + ErlScript)开发:用 Yaws 做 Web **,用 Erlang Script(*.yaws)写页面,用 Mnesia 来做数据存储。LYME 虽然和 LYMP 只差一个字母,但是此 M 非彼 M,两者大相径庭。**编译与安装**下载 yaws, openpamwget **://yaws.hyber.org/download/yaws-1.77.tar.gzwget **://nchc.dl.sourceforge.net/sourceforge/openpam/openpam-20071221.tar.gz编译/安装 openpamtar zxvf openpam-20071221.tar.gzcd openpam-20071221./configuresudo make install编译/安装 yawstar zxvf yaws-1.77.tar.gzcd yaws-1.77vi c_src/epam.c,修改其中的 #include 为 #include ./configuresudo make install**Yaws + PHP**安装php cgisudo apt-get install php5-cgi修改Yaws配置(sudo vi /usr/local/etc/yaws.conf)php_exe_path = /usr/bin/php-cgi #加入这行,为了让yaws找到php... port = 80 listen = 0.0.0.0 allowed_scripts = php yaws cgi #加入这行,以便在该虚拟主机(**)中启用php cgi ....**PHP支持:在 /usr/local/var/yaws/** 目录下,创建 **.php,内容如下:启动Yaws(命令行:sudo yaws -i),然后在浏览器地址栏输入 **://127.0.0.1/**.php,如果显示"Hello,PHP",那么恭喜你,你已经可以在 Yaws 这个Web服务器下写 PHP 了。**LYMP: Linux + Yaws + MySQL + PHP**有了PHP的支持,剩下来的问题可能是数据库(Database)了。但其实这个问题和Yaws关系不大。只要你安装了MySQL,并且PHP安装了MySQL扩展,就可以用 LYMP 进行 Web 开发了。**LYME v.s. LYMP**LYMP 优势:和大家熟悉的 LAMP 最接近,而且可以无缝切换。Web ** 是 Yaws,还是 Apache,或者是甚至是 IIS? 基本不会对我们的开发产生太多的影响。而劣势是,Erlang 的优势在这里的体现并不明朗。因为一般 Web 服务器的瓶颈主要在数据库(Database)上,前端的 Web ** 就算有瓶颈,一般也用负载均衡(LB)搞定,看起来不需要动用 Erlang。LYME优势:压力最重的数据库使用 Mnesia 这个分布式数据库来降低成为热点的可能性(当然具体还是会取决于你的设计)。而劣势是,对传统的 Web 开发人员而言,所有的东西都是新的,学习的成本过高。**ErlyWeb**ErlyWeb(**://code.google.com/p/erlyweb/) 基于 Yaws,但是它倾向于 Linux + Yaws + MySQL + ErlTL 开发。也就是说,数据库用传统的 MySQL,其他用 Erlang 进行开发。ErlyWeb 的作者对 Erlang 的兴致很高,主导了多个 Erlang 开源项目。而最引入瞩目的一个,可能要算 twoorl (**://code.google.com/p/twoorl/): 它是一个开源的仿 Twitter 程序,并且是一个很好的基于 ErlyWeb 的样例。**MochiWeb**MochiWeb 是 MochiBot.com 公司的 Bob Ippolito 贡献的开源项目。 MochiBot.com 提供 Flash 内容的访问统计和用户跟踪服务(你可以理解为这是针对 Flash 的 Google Analytics 服务),它们在 MochiWeb 之上构建了一个定制化的 Web **,并通过这个 Web ** 获取用户的访问数据(在这一点上有点象我发起的 Erlana 项目)。由于 Analytics 服务的特殊性,你可以想象,这个 Web ** 需要很高的并发支持。 MochiWeb 因此应运而生。 它针对的不是大家普遍意义上理解的 Web 开发。和传统的 LAMP 很不一样,你甚至可以不把它看作一个 Web **,因为它几乎没有任何 Web 开发所有常用的基础设施。但是 MochiWeb 最大卖点是非常轻量(高并发)而灵巧(易于定制),在特殊的场景下非常有用。目前 MochiWeb 已知的或者可以预见的应用包括:Facebook 的 Web Chat(**://yoan.do**.ch/blog/2008/05/15/)CouchDB(**://**.javaeye.com/news/459)Erlana: Web Analytics服务(**://code.google.com/p/erlana/)** Open Web API(RESTful): 为了提供Web API,你没有必要为此搭建一个通常意义的 Web **。**Comet Programming: Web Chat**Comet 是一项很时髦的技术。其目的很简单:由于历史原因,目前 ** 协议信息都是客户端向服务器要(Poll),服务器没有办法推送信息给客户端(Sever Push)。这在实现某些应用的时候就会遇到麻烦。例如:当邮件服务器收到新的邮件时,及时报告给用户,如果他在线的话(GMail 这样做了)当 Web Chat 服务器收到新的信息时,及时发送信息到相应的在线用户(Web Chat 的基本需求)。聊天时提示你对方正在输入(时下 IM 客户端很时髦的一个功能)。这里让我们假想要做一个 Web Chat。一个最笨的方法,就是客户端隔一段时间就向服务器请求(Request)一次,看看有没有新的信息,如果有则取回新信息,没有那么这次的请求就浪费了。这个方法无端增加了网络流量和服务器的负荷,显然并不可取。那么 Comet 是如何做的呢? 有两种实现方式,一种叫 Streaming,一种叫 Long Polling。这里我们介绍后者。简单来说,Long Polling 就是客户在初始化的时候向服务器发送一个请求(建立连接),该请求到服务器那里后被阻塞,直到有事件发生后才返回,客户端在获得事件并处理后,再重新建立 一个新连接,如此反复。由于请求在没有事件的时候并不马上返回,这就大大减少了网络流量。当然这里有个细节,就是超时处理。因为现在路由器和防火墙都会自 动断开时间比较长的连接。关于 Comet 技术更多的消息,可以参阅 **://cometdaily.com/。Comet 技术对服务端的要求还是很高的,Long Polling减少了网络流量,但是服务端的连接数并没有减少。因此基于 Comet 的应用,很容易在 Scale(伸缩性)上出现问题。使用 Erlang + MochiWeb,还是很好的利用了 Erlang 可以轻松建立大量连接这个特性。需要指出的是,很可能 Comet 应用的时髦,将会很大程度上促进了业界对 Erlang 的关注。基于 Erlang 的 Web Chat,Facebook 做了一个。这里有网上某人对 Facebook 之 Web Chat 的“模仿版”。研究这个 Web Chat,你将更清晰如何进行 Comet 编程:**下载并编译MochiWeb**svn co **://mochiweb.googlecode.com/svn/trunk mochiweb #取得mochiweb源码cd mochiwebmakeMOCHIWEB=`pwd`**Minimal Web Chat**wget **://yoan.do**.ch/blog/2008/05/15/chat.tgztar zxvf chat.tgzcd chat/depsln -s -f $MOCHIWEB mochiweb-srccd ..make./start.sh这样,在 **://localhost:8000/ 就启动了一个 WebChat **。你可以从多台机器连接该 **进行聊天。**Template Engine for Erlang**虽然 Erlang 和传统的 Web 开发模式是可以结合的(如上面的 LYMP),但是多数基于 Erlang 的开发似乎并不打算这样做。既然已经用了 Erlang,一个纯的 Erlang 应用也许是个更不错的主意。但是既然倾向于用 Erlang 取代 PHP/JSP 来作为脚本引擎,那么基于 Erlang 的 Template Engine(模板引擎)就少不了了。目前基于 Erlang 的主要 Template Engine 如下:ErlTL(**://code.google.com/p/erlyweb/):是 ErlyWeb 作者专门为 Erlang Web 开发制作的模板引擎。ErlyDTL(**://code.google.com/p/erlydtl/):基于著名的 Django Template Language(Python)的 Erlang 移植版。sgte(**://code.google.com/p/sgte/):基于 StringTemplate(Java)的 Erlang 移植版。Yaws ErlScript(**://yaws.hyber.org/):该模板引擎没有正式命名,姑且称之为Yaws ErlScript。类似 PHP,一个正常的 HTML 页面是一个合法的 Yaws ErlScript 文件。它通过在正常 HTML 中接入特殊标签,然后** Erlang 脚本代码实现动态页面。

解决方案

就是早先屏蔽了好多词,楼主可以修改一下相关的内容,这样可以看的清楚些。。。。。。。。
解决方案二:
嘿嘿,回个贴表明我来过。static/image/common/sigline.gif90%打工小伙一生都不可能知道的秘密 http://67177.miyue999.com/
解决方案三:
好多啊,哈哈,谢谢您static/image/common/sigline.gif90%打工小伙一生都不可能知道的秘密http://user.qzone.qq.com/82175487
解决方案四:
不服不行,楼主就是有水平static/image/common/sigline.gif一个月自然增高2cm,国家专利产品,联系Q或者微信82175487

时间: 2024-09-13 08:25:57

Erlang 与 Web 开发(转)的相关文章

【精华】Web开发必备资源汇总

导读:原文来自<Best "must know" open sources to build the new Web>,译文由酷壳网陈皓整理编译<开源中最好的Web开发的资源 >.文中收集的资料相当的齐全,供大家学习.参考. 学习HTML 5编程和设计 HTML5 Rocks : Major Feature Groups的学习HTML5的资源(HTML5演示,教程). 源码 很不错的HTML5 Dashboard–Mozilla,效果很炫. WhatWG Dev

【转】软件开发工具介绍之 6.Web开发工具

1.EditPlus  无论是编写xhtml页面,还是css.js文件,甚至随笔记记这样的事情,我都会使用EditPlus,感觉它不仅功能强大,更难得的是:绿色.轻量级.启动速度快.稳定性高 1.1 配置文件模板 设置好EditPlus的配置文件,告别重复的体力劳动.如果我们经常建立一种文件,而这种文件总会包含一些重复的文字或者代码的话,我们就可以建立模板,然后通过模板建立文件.从而摆脱每次都要重复的体力劳动. 1.2 顺手的侧边栏 侧 边栏包含了"快速目录路径"和"快速剪贴

WEB设计技巧:Web开发中经常使用的网站和Web App

文章描述:Web用户体验师Jake Rocheleau撰写了一篇文章分享他在Web开发中经常使用的网站和Web App,其中包含各类字体库.代码库.插件库.配色方案和测试工具.他同时指出,Web开发环境将慢慢转向云端. Web用户体验师Jake Rocheleau撰写了一篇文章分享他在Web开发中经常使用的网站和Web App,其中包含各类字体库.代码库.插件库.配色方案和测试工具.他同时指出,Web开发环境将慢慢转向云端. CodeVisually是一个开源项目.在它的分类目录下有各种插件.

移动Web开发的bug及解决方案

我目前移动Web开发遇到的bug以及解决方案(慢慢补充当中). 1.android4.0以上一部分手机的webview中,当canvas小于屏幕大小时,绘图时会出现重影,就是说一个图只绘制了一遍,却出现了两个. 解决方案: canvas外层的div需要设定属性style="overflow:visible;-webkit-transform: translateZ(0)";   2.ios应用里面webview在iPhone6或iPhone6 plus获取的设备宽度(device-wi

Ajax在进行web开发中的安全性分析

在进行web开发中ajax的安全性如何呢?现在浏览器允许用户提高他们的安全等级,关闭 JavaScript 技术,禁用浏览器中的任何选项.在这种情况下,代码无论如何都不会工作.此时必须适当地处理问题,这需要单独的一篇文章来讨论,要放到以后了(这个系列够长了吧?不用担心,读完之前也许您就掌握了).现在要编写一段健壮但不够完美的代码,对于掌握 Ajax 来说就很好了.以后我们还将讨论更多的细节. Ajax 世界中的请求/响应 现在我们介绍了 Ajax,对XMLHttpRequest对象以及如何创建它

web标准下的web开发流程思考

web|web标准 web开发需要考虑三面人的人员:设计师,程序员,客户,项目经理. A.设计师负责平面效果设计 B.程序员负责系统开发 C.客户提出需求验收系统 D.项目经理负责统筹全局 这里就不谈需求分析细节,和与客户谈判的细节了,假定需求已经确定. web标准是结构和表现相分离的,所以设计师和程序员在项目经理需求确定之后,可以并行开发,打破了以往的,平面效果确定系统才能开发的低效率开发流程.什么样的系统都可以拥有MVC式系统的开发效率. 下面是一个流程图 需求确定,系统规划完成之后: 程序

web开发设计人员不可不用的在线web工具和应用

大家可能还记得在过去的文章我们我们曾经介绍我们收集的前端开发人员必备的工具,脚本和资源,在今天的这篇文章中,我们将继续推荐给大家一组我们精挑细选的web开发设计必备的在线工具应用.相信会在web开发和设计的过程中给你带来方便和快捷! 前端开发相关 jsfiddle jsfiddle是老牌的在线调试和分享代码的网站,它可以帮助你在线调试javascript/css/html代码, 并且方便的发布到社区,论坛或者社交媒体上与朋友们分享或者提问.整合了很多的不同的类库供大家选择. 类似的工具还有jsb

WEBJX分享适合web开发人员需求的小工具

文章简介:今天就给大家分享10个有用的小工具,我相信这将是适合大多数开发人员的需求,这些小工具在可用性,速度和稳定性方面,为开发人员提供更多的选择功能,如果你正在开发一个这样的项目有,这些小工具是不错的选择. 构件 (或控制) 是由用户,如窗口或文本框中显示可变信息图形用户界面 (GUI) 的元素.在web开发当中我们经常需要构建用户友好的部件,如百度谷歌地图的拖拽,社会化分享工具的显示次数,漂亮的UI按钮等等,这些都是由小部件构建应用程序模块然后呈现给用户的基本视觉页面. 今天就给大家分享10

成为优秀的Web开发人员的学习步骤和学习内容

如果你已经是一名优秀的Web开发人员,那请路过即可.如果你还是一个准备入行或刚入行的菜鸟,那本文倒值得一读.要成为一名优秀的Web开发人员,没有捷径可走,10步让您成为一名优秀的 Web开发人员就是为那些还在苦苦寻找学习目标的人编写的. 第一步:学好HTML HTML(超文本标记语言)是网页的核心,因此你首先 应该学好它,不要害怕,HTML很容易学习的,但也很容易误用,学懂容易要学精还得费点功夫,但学好HTML是成为Web开发人员的基本条件. 学习资源: HTML Dog (http://htm