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" 压缩包很可能是为了展示如何使用 Mochiweb 在 Erlang 中构建一个简单的 Web 应用程序或测试环境。 Mochiweb 的核心组件包括以下几个部分: 1. **HTTP 服务器**:Mochiweb 提供了...
这个实例将帮助我们理解Mochiweb是如何工作的,并如何使用它来构建一个简单的Web服务器。Erlang是一种并发性极强、容错性高的语言,特别适合构建分布式系统,而Mochiweb则是Erlang生态系统中的一个重要组件。 首先...
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(直到并包括 ...
这个基于Mochiweb的聊天室项目展示了Erlang和Mochiweb在构建实时网络应用上的强大能力。通过学习和分析这个项目,开发者可以深入理解Erlang的并发模型、Mochiweb的工作原理,以及如何利用它们构建高效、可靠的Web...
rebar 是一个 Erlang 构建工具,可以方便的编译测试 Erlang 应用程序和发布。下面是详细的知识点: 一、建立一个工程项目 在建立一个 Erlang 工程项目时,需要首先安装 Erlang 和 Git 代码管理系统。在 Ubuntu ...
- 配置`$ERL_LIB`路径,以便自动加载Mochiweb。 2. **获取依赖**: - 通过SVN检出Mochiweb。 - 获取GeoIP数据库并解压。 - 获取egeoip客户端库。 3. **编写代码**: - 实现`gen_server`行为的各个回调函数。 - ...
4. Mochiweb - 用于构建高效的Web服务器和HTTP客户端的Erlang库 5. Disco - 分布式计算框架 **Erlang 与操作系统的比较** Erlang 采用函数式编程范式,与传统的Unix操作系统(通常使用C++)有所不同。在Erlang中,...
在Erlang Web框架中,Mochiweb和Cowboy通常被用于构建RESTful API、实时Web应用或者作为其他复杂系统的一部分。这些框架充分利用Erlang的actor模型,实现了进程间的异步通信,从而在处理高并发场景时能保持良好的...
MochiWeb是一个Erlang库,用于构建轻量级的HTTP服务器。 最新版本的MochiWeb可从获得。 MochiWeb的邮件列表位于 R12B兼容性:MochiWeb的母版已通过R14A及更高版本进行了测试。 与R12B兼容的分支在单独维护。为方便...
RPSSL彗星 RPSSL-Rock-Paper-Scissors-Spock-Lizard是一款简单但着名的2人游戏。 通常,它是第一人称自己玩的,但这是网络版本。 ... ... 因为它使用的资源很少,所以我们可以使其永远处于阻塞状态,并保持连接处于打开...
该框架基于Mochiweb(一款用Erlang编写的Web服务器)构建,旨在帮助开发者轻松构建遵循HTTP语义的服务,同时避免了在业务逻辑中直接处理HTTP相关的复杂性。 ##### 原则 - **默认行为**:Webmachine实现了一些默认...
首先,`all.bat`可能是一个批处理文件,用于自动化执行一系列命令或启动相关程序,方便用户快速地运行或测试演示内容。 `JavaScript_Delphi_ErLang.ppt`和`.pptx`是PowerPoint演示文稿,通常包含详细的教学材料,如...
在Erlang中,我们可以使用`jsx`或`jiffy`库来解析和序列化JSON数据。 2. **Erlang与JSON的互转**:通过Erlang的JSON库,可以轻松地将Erlang术语转换为JSON字符串,反之亦然。这对于Erlang和Websocket之间的数据交换...
4. **简化流程并提高速度**:通过简化部署过程和提高自动化水平来加快应用的交付速度。 #### 五、Cloud Foundry的构建方式 1. **内核与编排器外壳**:Cloud Foundry采用了内核与编排器的设计,构建在IaaS之上。 -...
- **MochiWeb**:一个高效的Web服务器,适用于构建云服务的前端。 ### 总结 综上所述,Erlang作为一种面向并发的编程语言,在云计算领域有着广泛的应用前景。无论是通过内置的分布式支持还是通过强大的并发机制,...
很棒的精选的Erlang框架,库和软件的精选列表。... 基于Erlang / OTP的分布式MQTT消息代理。... -Lisp风味Erlang(LFE) -Erlang Web MVC,现在具有Comet功能 -MochiWeb是用于构建轻量级HTTP服务器的Erlang库。
- **遵循标准目录结构**:采用标准的OTP目录结构,使项目更加规范化,便于他人理解和使用。 - **合理利用行为**:根据业务需求选择合适的行为来组织代码,提高代码的可读性和可维护性。 - **注重性能优化**:采用...
全局名称服务、节点心跳检测、自动故障转移和接管机制以及gen_server行为等OTP组件,为分布式系统的构建提供了强大的支持。Erlang的分布式数据库Mnesia则提供了一种实时性较强、支持水平分割和数据冗余的解决方案,...
通过创建标准化接口,SimpleBridge减轻了对多个Erlang HTTP服务器进行编码的麻烦。 它目前支持Cowboy,Inet,Mochiweb,Webmachine和Yaws。 SimpleBridge用作两个最受欢迎的Erlang Web框架到Web服务器的桥梁: 和 ...