摘要:
大家好,今天是周日,继续为大家带来这个系列的第九篇,昨天参加同事的婚礼,今年已经好几个同事结婚了,时间过的真是快啊。转眼也是奔三的人了,得再加把劲学习了。 好了,进入今天的主题,上一篇中,我们讲到了 cowboy_http_protocol:wait_request/1 和 cowboy_listener:add_pid/4 这两个方法,今天,我们继续。 我们先看下调用 cowboy_http_protocol:wait_request/1 这个方法cowboy_http_protocol:init/1的代码: %% @private-spec init(pid(), inet:so... 阅读全文
随笔分类 - Erlang
Cowboy 源码分析(八)
2012-05-24 00:48 by rhinovirus, 4174 阅读, 收藏, 编辑
摘要:
大家好,这篇文章又晚了几天,这几天公司的事情比较多,每天晚上都3点多才到家,今天终于稍微不忙,回到家吃个饭,继续为大家带来这个系列的第八篇。 上一篇中,我们讲到了 cowboy_acceptor:acceptor/7 方法里的这一行代码: cowboy_listener:add_connection(ListenerPid, default, Pid, OptsVsn), 我们来看下这个方法的这个参数分别是什么: ListenerPid 是cowboy_listener工作进程的进程标识; Pid 则是cowboy_requests_sup督程的子进程标识符; OptsVsn ... 阅读全文
Cowboy 源码分析(七)
2012-05-22 00:18 by rhinovirus, 2695 阅读, 收藏, 编辑
摘要:
上一篇我们讲到了cowboy_requests_sup这个模块,这一篇继续往下走,看下 cowboy_acceptor 这个模块:%% @private-module(cowboy_acceptor).-export([start_link/6]). %% API.-export([acceptor/7]). %% Internal.%% API.-spec start_link(inet:socket(), module(), module(), any(), pid(), pid()) -> {ok, pid()}.start_link(LSocket, Transport, P.. 阅读全文
Cowboy 源码分析(六)
2012-05-21 01:07 by rhinovirus, 2814 阅读, 收藏, 编辑
摘要:
周末两天在公司盯着服务器,平均在线突破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, 3282 阅读, 收藏, 编辑
摘要:
大家好,这一篇是 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, 4114 阅读, 收藏, 编辑
摘要:
上一篇我们简单介绍了 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, 4445 阅读, 收藏, 编辑
摘要:
上一篇文章我们介绍了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 阅读, 收藏, 编辑
摘要:
大家好,在上一篇文章中,我们简单介绍了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, 13841 阅读, 收藏, 编辑
摘要:
首先,今天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, 769 阅读, 收藏, 编辑
摘要:
偶然看到的 源头鸟 的博客,不错的文章,转载收藏,有空试试 地址:http://www.liuweihua.com/?p=552 阅读全文
获取Erlang系统信息的代码片段
2012-05-14 00:57 by rhinovirus, 626 阅读, 收藏, 编辑
摘要:
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, 7761 阅读, 收藏, 编辑
摘要:
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, 2663 阅读, 收藏, 编辑
摘要:
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... 阅读全文
erlang 开源项目之 Bigwig
2012-05-09 11:04 by rhinovirus, 2715 阅读, 收藏, 编辑
摘要:
我是从 坚强2002 Erlang Web 监控工具 知道这个工具的,用百度搜索时,还真没发现别人提到这个工具,从他的博客里确实能学到好多东西,大家有空去看看。下面是官方的介绍:Bigwig is a suite of web-based tools for the Erlang VM, like webtool.Tools that we currently include custom versions of:"etop" - see which processes are using the most cpu/heap/reds/etc"rb" - 阅读全文
使用 debugger 简单调试 erlang
2012-05-07 23:55 by rhinovirus, 6852 阅读, 收藏, 编辑
摘要:
1. 官方文档有很详细的介绍,地址如下:http://www.erlang.org/doc/apps/debugger/debugger_chapter.html2. 新建 main.erl 文件,代码如下:-module(main).-export([start/0, stop/0]).start() -> S = sum([1,2,3,4,5,6,7,8,9]), io:format("sum is ~p~n", [S]).stop() -> io:format("stop.~n").sum(L) -> sum(L, 0).sum( 阅读全文
erlang 编译之 to_core
2012-05-07 14:40 by rhinovirus, 663 阅读, 收藏, 编辑
摘要:
感谢 坚强2002 同学的推荐http://www.it.uu.se/research/group/hipe/cerl/main.erl-module(main).-export([start/0]).start() -> ok.c(main, to_core).会产生中间代码文件 main.core打开如下main.coremodule 'main' ['module_info'/0, 'module_info'/1, 'start'/0] attributes []'start'/0 = %% Line 阅读全文
ubuntu 11.10 使用 emacs-23.4 开发 erlang 整理之 安装 ESense
2012-05-05 16:29 by rhinovirus, 567 阅读, 收藏, 编辑
摘要:
1. 下载 地址为:http://sourceforge.net/projects/esense/files/2. 解压文件到 ~/.emacs.d/plugins/ 目录下3. 增加配置到 .emacs 中;;esense(setq load-path (cons "~/.emacs.d/plugins/esense-1.12" load-path))(require 'esense-start)(setq esense-indexer-program "~/.emacs.d/plugins/esense-1.12/esense.sh")重启, 阅读全文
ubuntu 11.10 使用 emacs-23.4 开发 erlang 整理之 安装 ecb
2012-05-05 16:21 by rhinovirus, 849 阅读, 收藏, 编辑
摘要:
1. 下载 ecb 地址为:http://sourceforge.net/projects/ecb/files/2. 解压 ecb 到 ~/.emacs.d/plugins/ 目录下3. 配置 cedet,emacs 23.4 自带了 cedet 只需要配置就可以使用了。;;cedet(require 'cedet)(global-ede-mode t);;;; Helper tools.(custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you co 阅读全文
ubuntu 11.10 使用 emacs-23.4 开发 erlang 整理之 安装distel
2012-05-05 16:11 by rhinovirus, 1207 阅读, 收藏, 编辑
摘要:
贴下官方的说明distel -- Distributed Emacs Lisp for Erlang.------------------------------------------------------------Distel is a library for Emacs<->Erlang communication, plus a suite oftools built on top of it, such as a debugger front-end. It works byusing the Erlang distribution protocol to conne 阅读全文
ubuntu 11.10 使用 emacs-23.4 开发 erlang 整理之 使用自带erlang-flymake.el
2012-05-05 15:51 by rhinovirus, 697 阅读, 收藏, 编辑
摘要:
我们看下 erlang安装目录下 /usr/local/lib/erlang/lib/tools-2.6.7/emacs/erlang-flymake.el官网已经在正式的版本中,集成了这个语法检查工具,只需要在 .emacs 增加如下配置就可以正常使用erlang-flymake了。(require 'erlang-flymake);;仅在存盘时进行检查(erlang-flymake-only-on-save);;键盘映射(defvar flymake-mode-map (make-sparse-keymap))(define-key flymake-mode-map (kbd &q 阅读全文