Nitrogen自学笔记.docx

上传人:b****6 文档编号:8356598 上传时间:2023-01-30 格式:DOCX 页数:12 大小:579.81KB
下载 相关 举报
Nitrogen自学笔记.docx_第1页
第1页 / 共12页
Nitrogen自学笔记.docx_第2页
第2页 / 共12页
Nitrogen自学笔记.docx_第3页
第3页 / 共12页
Nitrogen自学笔记.docx_第4页
第4页 / 共12页
Nitrogen自学笔记.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Nitrogen自学笔记.docx

《Nitrogen自学笔记.docx》由会员分享,可在线阅读,更多相关《Nitrogen自学笔记.docx(12页珍藏版)》请在冰豆网上搜索。

Nitrogen自学笔记.docx

Nitrogen自学笔记

Nitrogen自学笔记I:

:

简介

2009-12-14下午10:

37

Nitrogen是什么?

一个Erlang的WebFramework,可以建筑在Inets/Mochiweb/Yaws上的。

有什么特别?

可以很简单的实现RealTime的网站,ServerPush/Comet、分布式程序、高并发程序。

简单来说,我们可以很“容易”的实现,高并发的Comet应用。

比如一个

一个Mochiweb的应用

Wiki:

官网:

Nitrogen自学笔记II:

:

nterviewwithRustyKlophausontheNitrogenErlangWebFramework

2009-12-14下午10:

45

HiDavidw,Thanksforyourinterestandquestions.Fornow,NitrogenisprimarilyaimingtobringErlanguptoparwithotherlanguagesforcreatingdynamic,Ajax-ifiedWeb2.0applications.

"WhatdoesitreallydothattakesadvantageofErlang?

"

Thebigadvantageisthat,withNitrogen,youcandevelopyourentireWeb2.0applicationinErlang.BeforeNitrogen,mostpeopledidthefrontendinRailsandthebackendinErlang,andusedabridge,suchasApacheThrift,togetthemtalking.OnceyourwebappisinErlang,youcan:

*RunonMochiweborYaws,bothextremelyperformanthttpservers.

*Distributeyourwebserveracrossmultiplenodeswithoutworryingaboutstickysessions.

*ReapalloftheotherErlanggoodness,suchashotcodeswapping,builtinapplicationmonitoringandrestarting,anextremelystableenvironment,etc.

(AllofthestuffthatmadeAmazonuseErlangforSimpleDBandFacebookuseErlangforFacebookChat.)

"WhatabouttheDBlayer?

"

Mnesia,Erlang'sbuiltindatabase,actuallydoesthejobquitewell.LanguagestendtoaddaDBlayertoeasethepainofjumpingintoandoutofSQL,andwe'resousedtothisthatweexpecttohavetodothesameinanylanguage.Butinthiscase,MnesiathinksinErlangsyntax,sothereisreallynoneedtowrapitinanything.Plus,Mnesiaworksreallywellfordocumentswithchangingschemas,whichisveryWeb2.0.Ifyou'dratheravoidMnesiaanduseSQL,thenErlyDBisyourbestoption.

Nitrogen自学笔记II:

:

如何传递Data给Template

2009-12-15下午10:

57

-----File:

web_blog.erl-----

-module(web_blog).

-include("wf.inc").         //IncludeNitrogenElements,

-compile(export_all).

main()->#template{file="./wwwroot/one2column.html"}. //RenderHTMLbypassingData

title()->"NitrogenReferenceEric".  //ForHTMLtemplate; canbecalledlike[[[page:

title()]]]intemplate

headline()->"NitrogenReferenceOverview".

body()->[

"

ElementsEric!

!

!

ElementsarethebuildingblocksofaNitrogenpage.Theyletyouspecify

apagetemplate,divs,spans,textboxes,andbuttonsusingasimplesyntaxbasedon

Erlangrecords.

Actions

Actionsletyoumakeapagedynamic.Useactionstowireupclickormouseover

events,applyJQueryeffects,showorhideelements,anddisplayalerts.

Validators

Validatorshelpyoucheckthatthedataauserenteredisvalid.Checkfor

requiredfields,integervalues,emails,andothers,oraddyourown

customvalidators.

"

]. 

Nitrogen自学笔记III:

:

定义Function

2009-12-15下午11:

09

Nitrogen根本还是Erlang,所以定义一个Function/Module必然要遵循基本的语法,这里不多说了。

但是,Nitrogen毕竟是一个Framework,他有自己的语法、自己的封装。

为了更便于理解和学习,我们在定义一个Module的时候,需要遵循一个简单的原则:

如我们将要实现一个URL例如:

那么我们的Module的目录结构及命名应为:

-blog

--view

---blog_view_all.erl

Nitrogen自学笔记4:

:

Template中调用Module

2009-12-16下午09:

18

普通情况,我们在Template当中,都是应用[[[page:

body()]]]的方法借助page这个MasterModule来传递参数,但是,当有需要调用另外的Module来进行处理,或者可以复用的模块,则可以采用:

[[[another_module:

render()]]]的方法,书写一个another_module.erl来进一步处理。

如可以在这个新的Module下面定义:

#button{id=btn,text=“DoDomthing”,postback=do_something}

Nitrogen自学笔记5:

:

Nitrogen链接CouchDB

2009-12-23下午11:

06

Nitrogen没有自己的数据库方法,我们可以引用第三方的API链接CouchDB,我采用erlang-couchDB,从这里可以找到转帖的原文

首先,启动Mochiweb+Nitrogen

-----start.sh-----

#!

/bin/sh

exportNITROGEN_SRC=..

exportCOUCHDB_SRC=../erlang_couchdb

exportMOCHIWEB_SRC=../mochiweb

cd`dirname$0`

if[[-d$MOCHIWEB_SRC]];then

echo"UsingMochiwebindirectory$MOCHIWEB_SRC."

else

echo

echo"Update\$MOCHIWEB_SRCtopointtoyourMochiwebdirectory."

echo"Exiting..."

echo

exit1

fi

echoCreatinglinktoNitrogensupportfiles...

rm-rfwwwroot/nitrogen

ln-s../$NITROGEN_SRC/wwwwwwroot/nitrogen

echoStartingNitrogenonMochiweb...

execerl\

-namenitrogen@127.0.0.1\

-pa$PWD/apps$PWD/ebin$PWD/include\

-pa$COUCHDB_SRC/ebin$COUCHDB_SRC/include\

-pa$NITROGEN_SRC/ebin$NITROGEN_SRC/include\

-pa$MOCHIWEB_SRC/ebin$MOCHIWEB_SRC/include\

-smakeall\

-sreloader\

-eval"application:

start(nitrofront)"

然后,很简单的应用这个API

-----web_create.erl-----

-module(web_create).

-include_lib("../include/wf.inc").

-compile(export_all).

main()->#template{file="./wwwroot/onecolumn.html",bindings=[

{'Group',index},

{'Item',create}

]}.

title()->"createanewmapping".

headline()->"Mapanewpathtoadestination".

body()->[

#link{class=tiny,text="backtolist",url="/web/index"},

#p{},

#label{text="Path:

"},

#textbox{id=path,text="/new/path"},

#label{text="Destination:

"},

#textbox{id=dest,text="http:

//new.destinati.on/"},

#p{},

#button{text="save",postback=button_pressed}

].

event(button_pressed)->

Path=wf:

q(path),

Dest=wf:

q(dest),

links:

create_mapping(Path,Dest),

wf:

flash(wf:

f("recordsaved:

~s->~s",[Path,Dest]));

event(_)->ok. 

-----links.erl-----

-module(links).

-compile(export_all).

get_all()->

{json,{struct,Props}}=erlang_couchdb:

invoke_view({"127.0.0.1",5984},"umleitung","redir","match",[{"key","\"/\""}]),

try proplists:

get_value(<<"rows">>,Props)of

[{struct,Row}|_]->

[proplists:

get_value(<<"key">>,Row),proplists:

get_value(<<"value">>,Row)];

_->{error,unknown}

catch

_:

_->{error,unknown}

end.

create_mapping(Path,Dest)->

Doc=[

{<<"type">>,<<"redir">>},

{<<"path">>,list_to_binary(Path)},

{<<"destination">>,list_to_binary(Dest)}

],

erlang_couchdb:

create_document({"127.0.0.1",5984},"umleitung",Doc).

Nitrogen自学笔记6:

:

安装NitrogenonMochiweb

2009-12-26下午01:

30

在官网上有一个教程,但是我发现还是有些不太清楚,不太适合我这种小白。

以下是我的配置过程

1.下载Mochiweb、Nitrogen,这个就不用多嘴了

2.我这样部署我的目录结构:

g是我的源码,所有Nitrogen/Mochiweb/erlang-CouchDB/...都在放nitrogen下面

3.使用Nitrogen自带的命令行来创立一个project

4.这样在g文件夹下面就会产生默认的文件

5.下面我们需要编辑一下start.sh

6.还有一步,这个是我感觉不太方便的地方,也许我还没有搞明白正确的地方来编译。

一下是我的小技巧

7.使用文本编辑器,编辑g.app,如果有大牛了解如何编译生成这个配置文件,请赐教~~~

8.最后我们需要编辑一下我们的web_index.erl文件,这个是nitrogen默认启动后会查找的文件,简单来说,就是修改正确的Lib目录

9.OK了,运行./start.sh时候可以看到如下的页面

剩下的就是我们自己去创造我们自己的代码了~~~:

-D

Nitrogen自学笔记7:

:

NitrogenwithPostgreSQL

2010-01-10下午08:

01

要实现Erlang和MySQL或者PostgreSQL并没有想象的容易。

对于,MySQL来说找了2个方法,

1. eralng-mysql, 始终无法正确链接数据库。

2. mysql-odbc mysql-odbc不支持Mac-10.6,所以放弃。

然后回到PostgreSQL上来吧。

1.获得一个Erlang-PostgreSQL的copy hgclone

2.保证在我们开始nitrogen的时候,加载erlang-postgre

3.我们自己的DBlayer

4.这样就可以了,其他的我们就可以慢慢书写了。

Nitrogen自学笔记8:

:

Erlang和Key-Value数据库

2010-01-10下午08:

13

最近一直对Key-Value类型的数据库一直很感兴趣。

感觉更能体现Erlang的分布式、高并发、高可用的特性。

但是,对于一个类似我这样都初学者,直接用这样的“新型”数据库,还真是很。

我就写写我的自我感觉吧。

1.首先进入眼帘的数据库是CouchDB,名气似乎最大,但是看了很多评论,比如Last.fm的CTO的这篇文章,还是很有启迪意义的

2.进而我又看了scalaris,很有意思,很奇特的设计,但是似乎不存在物理文件的感觉很不安全。

3.又看了国人写的这个

4.。

总之看了很多,试用了几个,都是很特别的。

但是,对于初学者来说,真得用起来非一朝一夕可以体会真谛的,我的意思是如果没有几个机器的互相策应,根本无法体会其中最有意思的地方。

也许,某一天有机会了,真得可以去真正部署一下。

Nitrogen自学笔记9:

:

Nitrogen收集教程-ing

2010-01-11上午09:

35

比较详细的教程

Nitrogen自学笔记10:

:

Comet应用

2010-01-11下午11:

19

Comet就不多说了,这里有一篇很好的文章介绍。

应用Nitrogen来实现Comet非常简单。

wf:

comet(fun()->YOUR_FUNCTION()end)

我认为Nitrogen就是应用了基于AJAX的长轮询(long-polling)的方式,由jQuery响应服务器发过来的更新,通过wf:

update来进行页面的更新,当更新结束后在发送请求给服务器,等待下次服务器给它更新。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1