代码改变世界

Cowboy 源码分析(六)

2012-05-21 01:07 by rhinovirus, 2814 阅读, 2 推荐, 收藏, 编辑
摘要:周末两天在公司盯着服务器,平均在线突破500,服务器CPU,内存,带宽,还算正常,出了不少bug,周一继续修改。回到家,继续跟大家分享 cowboy。 上一篇讲到了 cowboy_listener 这个工作进程,今天接着讲上次提到的另外两个监控督程,先看第一个:-module(cowboy_requests_sup).-behaviour(supervisor).-export([start_link/0, start_request/5]). %% API.-export([init/1]). %% supervisor.%% API.-spec start_link() -> {ok 阅读全文

Cowboy 源码分析(五)

2012-05-20 00:45 by rhinovirus, 3281 阅读, 0 推荐, 收藏, 编辑
摘要:大家好,这一篇是 cowboy 源码分析的第五篇文章了,可能我的写作能力不好,很多朋友看的比较迷糊,我也是尽力去说的更明白,希望越写越好吧。 上一篇,我们讲到了 cowboy:child_spec/6 这个方法,这个方法返回 动态启动 cowboy_listener_sup 模块的子进程规格,然后通过添加到监督进程,并启动supervisor:start_child(cowboy_sup, child_spec(Ref, NbAcceptors, Transport, TransOpts, Protocol, ProtoOpts)). 接下来我们看下cowboy_listener_su... 阅读全文

Cowboy 源码分析(四)

2012-05-19 17:52 by rhinovirus, 4112 阅读, 1 推荐, 收藏, 编辑
摘要:上一篇我们简单介绍了 cowboy 以及 cowboy_examples 下载,编译和运行,这篇我们来理解下 cowboy_examples 源码。 1. 改造部分模块,使它符合OTP设计原则的应用,这点可能大家会比较疑惑,但是我之所以修改它,是为了大家更好的理解,我们都知道 OTP 应用(这里有点形式化,但是在初期方便新手找到入口),一般是三个文件,分别是 Application_app.erl,Application_sup.erl,和 Application.app.src(编译后为 Application.app)。但是我们看这个例子,并没有按照这种规范来命名,为了方便新手,我做... 阅读全文

Cowboy 源码分析(三)

2012-05-17 11:54 by rhinovirus, 4444 阅读, 3 推荐, 收藏, 编辑
摘要:上一篇文章我们介绍了cowboy的程序启动,今天我们来实战,编译和运行 cowboy 和 cowboy_examples。 1. 首先需要安装 erlang的运行环境,在之前的文章我已经详细介绍了,具体可以看下 ubuntu 11.10 使用 emacs-23.4 开发 erlang 整理 (新手推荐)。 2. 下载 cowboy 和 cowboy_examples: 打开终端,输入以下命令: cd ~/Source git clone https://github.com/extend/cowboy.git git clone https://github.com... 阅读全文

Cowboy 源码分析(二)

2012-05-16 00:13 by rhinovirus, 6201 阅读, 2 推荐, 收藏, 编辑
摘要:大家好,在上一篇文章中,我们简单介绍了cowboy的其中2个文件,分别是 cowboy.app.src 应用程序资源文件(配置文件) 和 cowboy_app.erl 文件,今天,我们继续往下走,昨天的 cowboy_app.erl 中start/2 方法中有这一句,cowboy_sup:start_link(). 那么我们接下来就看下这个module。 代码如下:%% @private-module(cowboy_sup).-behaviour(supervisor).-export([start_link/0]). %% API.-export([init/1]). %% super... 阅读全文

Cowboy 源码分析(一)

2012-05-15 00:35 by rhinovirus, 13838 阅读, 4 推荐, 收藏, 编辑
摘要:首先,今天0点《暗黑破坏神3》就要正式开服了,但是我把晚上献给了erlang,经过前几天的努力,我已经看完了 Erlang OTP设计原则,在这里非常感谢,翻译成中文的作者 ShiningRay,没有你无私的奉献,也就没有我们这些菜鸟的幸福,废话不多说,进入今天的正题,我在今后这一段时间,跟大家一起来分享 Cowboy 这个开源的 erlang http 服务器。 我们看下官方的简介: Cowboy is a small, fast and modular HTTP server written in Erlang. Cowboy is also a socket acceptor ... 阅读全文

Erlang Loading beam 文件时出现加载 failed 之 not_purged(转)

2012-05-14 12:11 by rhinovirus, 767 阅读, 0 推荐, 收藏, 编辑
摘要:偶然看到的 源头鸟 的博客,不错的文章,转载收藏,有空试试 地址:http://www.liuweihua.com/?p=552 阅读全文

获取Erlang系统信息的代码片段

2012-05-14 00:57 by rhinovirus, 625 阅读, 0 推荐, 收藏, 编辑
摘要:SchedId = erlang:system_info(scheduler_id), SchedNum = erlang:system_info(schedulers), ProcCount = erlang:system_info(process_count), ProcLimit = erlang:system_info(process_limit), ProcMemUsed = erlang:memory(processes_used), ProcMemAlloc = erlang:memory(processes)... 阅读全文

Erlang OTP设计原则Gen_Fsm行为

2012-05-13 15:25 by rhinovirus, 7760 阅读, 4 推荐, 收藏, 编辑
摘要:1. Fsm 称为 有限状态机,举个例子,游戏中的怪物称为NPC,NPC一般有几种状态,比如:静止,移动,死亡,被攻击,攻击英雄等等几个有限的状态,那么我们就可以有限状态机实现NPC的状态变更。 一个有限状态机可以用一个关系式来描述,State(静止状态S1) x Event(英雄进入视野范围事件E) -> Actions(开始移动动作A), State(移动状态S2) 解释如下:当一个NPC处于静止状态S1,有一个英雄进入NPC视野范围时E,会触发NPC开始移动动作A,并且NPC转变状态为移动状态S2。 对于一个用 gen_fsm 行为实现的FSM来说,状态转换规则被写为符合如下约.. 阅读全文

Erlang OTP设计原则的行为理解

2012-05-12 23:52 by rhinovirus, 2662 阅读, 1 推荐, 收藏, 编辑
摘要:1. 首先我们来看例子1。-module(ch1).-export([start/0]).-export([alloc/0, free/1]).-export([init/0]).%% 启动频道服务start() -> spawn(ch1, init, []). %% 创建一个进程,这个进程会调用init方法,参数为[]%% 获取一个空闲的频道alloc() -> ch1 ! {self(), alloc}, receive {ch1, Res} -> Res end.%% 释放一个频道free(Ch) -> ch1 ! {fr... 阅读全文