1 在生产环境下,用inets实现的nitrgoen框架遇到并发量大的情况下会出现瓶颈,mochiweb在并发处理上优势要远大于inets,因此决定实现mochiweb-nitrogen框架。
2 准备工作,下载各应用
下载nitrogen源码http://github.com/nitrogen/nitrogen/tarball/v2.0.4
下载mochiweb源码https://github.com/mochi/mochiweb/tarball/master
下载rebar源码 https://github.com/basho/rebar/tarball/master
解压缩:
重命名:
构建rebar
以上命令生产了一个rebar文件
3 编译mochiweb_nitrogen
1 拷贝mochiweb到apps目录下
2修改makefile文件,使nitrogen能够顺利编译通过
在nitrogen/Makefile 中,rel_inner:位置下添加
@(cd apps/mochiweb; make)
3 make rel_mochiweb
4 在rel/目录下生成了一个名为nitrogen的文件夹
5 执行
证明nitrogen已经编译通过并启动成功。
4 以上编译已经通过,可以进行正常开发,但以前经常使用rebar构建项目,感觉这样开发很别扭,所以想把结构重新调整一下,如下:
5 新建自己的应用程序
把刚才生成的rebar文件考到此目录下
把mochiweb,nitrgen/apps目录下的nitrogen, simple_bridge,nprocreg考到deps目录下
在myapp目录下新建文件Makefile,rebar.config,start.sh
Makefile文件中内容:
PP_VERSION}
@echo Generated a self-contained myapp project
@echo "Usage: rel/myapp-${MYAPP_VERSION}/bin/myapp {start|stop|restart|reboot|ping|console|attach}"
package:
mkdir -p ./builds
tar -C rel -c myapp-${MYAPP_VERSION} | gzip > ./builds/myapp-${MYAPP_VERSION}.tar.gz
# SHARED
rel_inner:
@(cd rel; ./rebar generate)
@(cd rel/myapp; make)
@printf "myapp Version:\n${MYAPP_VERSION}\n\n" > rel/myapp/BuildInfo.txt
@echo "Built On (uname -v):" >> rel/myapp/BuildInfo.txt
@uname -v >> rel/myapp/BuildInfo.txt
@rm -rf rel/reltool.config
拷贝nitrogen/rel/nitrogen/site目录下的文件到site目录中
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/ebin ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/include ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/src ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/static ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/templates ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/Emakefile ./
复制myapp/src 下的三个文件myapp.app.src,myapp_app.erl,myapp_sup.erl 到目录myapp/site/src下, 修改myapp_sup.erl如下:
删除nitrogen_init.erl,nitrogen_mochiweb.erl
修改 myapp/etc下配置文件
{server_name, nitrogen}, {document_root, "./site/static"}]}].andy@yuhaitao:~/baidu/personal/mochiweb_test/myapp/etc$ cat vm.args ## Name of the riak node-name myapp@127.0.0.1## Cookie for distributed erlang-setcookie myapp## Heartbeat management; auto-restarts
VM if it dies or becomes unresponsive## (Disabled by default..use with caution!)##-heart## Enable kernel poll and a few async threads+K true+A 5## Increase number of concurrent ports/sockets-env ERL_MAX_PORTS 4096## Tweak GC to run more often -env ERL_FULLSWEEP_AFTER
10## Include .beam files for site.-pa ./site/ebin## Run code at startup.-eval "application:start(myapp)"
删除掉myapp下的src目录
修改start.sh文件属性
chmod 777 start.sh
测试一下:
这里是开发环境,已经OK
下一步进行打包版本的修改
把nitrgen/rel下的overlay文件夹,overlay_mochiweb文件夹,mochiweb.config文件,rebar文件拷贝到myapp/rel目录下
修改mochiweb.config文件名为myapp.config,修改内容
修改myapp/rel/overlay/bin目录下的nitrogen文件,重命名为myapp
把myapp/etc下的app.config文件与vm.args文件拷贝到myapp/rel/overlay/etc下替换掉之前的文件
把myapp/etc下的mochiweb.config文件拷贝到myapp/rel/overlay_mochiweb/etc下替换掉之前的文件
把myapp/site/ebin/myapp.app文件文件拷贝到myapp/rel/overlay_mochiweb/site/ebin目录下删除掉之前的文件
把myapp/site/src/下的myapp.app.src,myapp_app.erl,myapp_sup.erl文件拷贝到myapp/rel/overlay_mochiweb/site/src目录下删除掉之前的文件
一切ok
测试一下
启动成功,ok
分享到:
相关推荐
erlang mochiweb-test demo .zip
mochiweb实现的web服务器简单实例
name PREFIX=$HOME/projects/ 有关 Rebar(Erlang 构建工具)的信息可在MochiWeb 目前已使用 Erlang/OTP 18.3 到 24.0 进行测试,但仍可能兼容回 R15B-03。OTP 21.2、21.2.1、21.2.2 警告OTP 21.2(直到并包括 ...
用erlang语言写的,基于mochiweb的聊天室代码
MochiWeb是一个Erlang库,用于构建轻量级的HTTP服务器。 最新版本的MochiWeb可从获得。 MochiWeb的邮件列表位于 R12B兼容性:MochiWeb的母版已通过R14A及更高版本进行了测试。 与R12B兼容的分支在单独维护。为方便...
RPSSL彗星 RPSSL-Rock-Paper-Scissors-Spock-Lizard是一款简单但着名的2人游戏。 通常,它是第一人称自己玩的,但这是网络版本。 ... ... 因为它使用的资源很少,所以我们可以使其永远处于阻塞状态,并保持连接处于打开...
很棒的精选的Erlang框架,库和软件的精选列表。... 基于Erlang / OTP的分布式MQTT消息代理。... -Lisp风味Erlang(LFE) -Erlang Web MVC,现在具有Comet功能 -MochiWeb是用于构建轻量级HTTP服务器的Erlang库。
通过创建标准化接口,SimpleBridge减轻了对多个Erlang HTTP服务器进行编码的麻烦。 它目前支持Cowboy,Inet,Mochiweb,Webmachine和Yaws。 SimpleBridge用作两个最受欢迎的Erlang Web框架到Web服务器的桥梁: 和 ...
Webmachine是一个应用程序层,它在mochiweb提供的出色的按位和HTTP语法管理的基础上增加了HTTP语义意识,并提供了一种简单明了的方式将其连接到应用程序的行为。 可获得更多信息。 您还可以阅读有关Webmachine的...
heroku-genfsmAn experimental Erlang app which deployed on HerokuSome Deploy Detail在 Heroku 上部署 Webmachine + Mochiweb + ErlyDTL 组合的 Erlang Web 应用
很棒的网络刮板 支持 令人敬畏的Web scaper,爬虫的集合。 Java ...开源Web爬虫,建立在nosql数据库(apacheouchdb,riak),AMQP数据库(rabbitmq),webmachine和mochiweb之上。 Python scrap
Webmachine 是一个应用层,为 mochiweb 提供 HTTP 语义的特性,定义一个简单而清晰的连接应用的方式。 标签:Webmachine Web框架
核心功能目的:高性能协议中继端点:WebSocket,MQTT,TCP 代码库:700 LOC(Erlang),500 LOC(JavaScript) 透析仪:REBAR,REBAR3,MAD,MIX 主机:COWBOY,EMQ,MOCHIWEB,RING,TCP,UDP协议扩展模板:DTL,...
erlang web frame