首先,今天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 pool, able to accept connections for any kind of TCP protocol.

  源码下载地址:https://github.com/extend/cowboy

      例子:https://github.com/extend/cowboy_examples

  首先是下载源码:git clone https://github.com/extend/cowboy.git

  好,我们开始分析 CowBoy这个项目,首先是

  1. cowboy.app.src 这个文件,这个文件在编译后为cowboy.app也就是应用资源文件,又称为应用配置文件,Erlang不管是应用程序,还是一般的类库,最后都是以应用程序的方式启动,这个可以参看 Erlang OTP设计原则 中的 应用 ,内容如下:

{application, cowboy, [{description, "Small, fast, modular HTTP server."},{vsn, "0.5.0"},{modules, []},{registered, [cowboy_clock, cowboy_sup]},{applications, [kernel,stdlib]},{mod, {cowboy_app, []}},{env, []}
]}.

  资源文件中的每个字段我们在这边就不详细介绍了,推荐没有看过 Erlang OTP 设计原则 的朋友去看下,它能帮助你了解 Erlang 整体上的结构,比如,应该程序下一般是监控进程,然后监控进程又负责监控子进程等等,当然,在这个文档中,详细描述了上面所有字段的含义。

  配置文件中,键 mod 定义了回调模块以及应用的启动参数,在这个例子中相应是 cowboy_app 和 []。这表示应用启动的时候会调用:
  cowboy_app:start(normal, [])
  而当应用被停止的时候会调用:
  cowboy_app:stop([])

  2. 既然上面提到 应用被启动时,会调用 cowboy_app:start(normal, []),那么我们接下来看下下面这个文件:

  cowboy_app.erl

-module(cowboy_app).
-behaviour(application).-export([start/2, stop/1, profile_output/0]). %% API.-type application_start_type() :: normal| {takeover, node()} | {failover, node()}.%% API.-spec start(application_start_type(), any()) -> {ok, pid()}.
start(_Type, _Args) ->consider_profiling(),cowboy_sup:start_link().-spec stop(any()) -> ok.
stop(_State) ->ok.-spec profile_output() -> ok.
profile_output() ->eprof:stop_profiling(),eprof:log("procs.profile"),eprof:analyze(procs),eprof:log("total.profile"),eprof:analyze(total).%% Internal.-spec consider_profiling() -> profiling | not_profiling.
consider_profiling() ->case application:get_env(profile) of{ok, true} ->{ok, _Pid} = eprof:start(),eprof:start_profiling([self()]);_ ->not_profilingend.

  当应用程序启动时,会调用这个方法 start(_Type, _Args) 这个方法有2个参数,_Args 这个参数是从 应用程序配置文件中 {mod, {cowboy_app, []}},在这里 [] 空列表,

_Type 这个参数的值一般为 normal;

  我们看到在 start/2 方法中,有2行代码,consider_profiling() 这个是 和 eprof相关的,今天先不详细介绍,因为我也没见过。。。抱歉,我大概百度了下,A Time Profiling Tool for Erlang 想研究的可以看下官方DOC http://www.erlang.org/doc/man/eprof.html 大概意思就是 erlang 代码分析工具。

  我们看  cowboy_sup:start_link() 这行的意思是启动督程,就是监控进程,然后一般在其他子进程会在这棵监控进程树下。

  剩下一个方法就是 stop(_State), 用于停止应用程序使用。

  下面介绍下启动应用程序的方法:

  application:start(cowboy).

  停止应用程序的方法:

  application:stop(cowboy).

  今天就简单介绍这2个文件。谢谢

Cowboy 源码分析(一)相关推荐

  1. Cowboy 源码分析(十八)

    在上一篇中,我们整理了下cowboy_http_protocol:header/3函数,在文章的末尾留下2个没有讲到的函数,今天,我们先看下cowboy_http_protocol:error_ter ...

  2. cowboy源码分析

    2013-01-21 by 谢鸿锋 原创文章,转载请注明:转载自Erlang云中漫步 目录 ================================= 一.概述 二.ranch源码分析 三.c ...

  3. Cowboy 源码分析(十一)

    上一篇,我们使用debugger和HttpFox很方便了,查看了方法中的变量,不得不说,debugger 断点调试还是比较好用的.这一篇,我们仍将使用这些工具来帮助我们了解代码,好了,接着上一篇继续来 ...

  4. ranch 源码分析(完)

    接上 ranch 源码分析(三) 在上一次,根据ranch源码把大概流程理了一遍,下面我们将一些细节解释一下. ranch只是一个服务的框架,它提供了传输层协议代码(ranch_tcp 和ranch_ ...

  5. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  6. SpringBoot-web开发(四): SpringMVC的拓展、接管(源码分析)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...

  7. SpringBoot-web开发(二): 页面和图标定制(源码分析)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) 目录 一.首页 1. 源码分析 2. 访问首页测试 二.动态页面 1. 动态资源目录t ...

  8. SpringBoot-web开发(一): 静态资源的导入(源码分析)

    目录 方式一:通过WebJars 1. 什么是webjars? 2. webjars的使用 3. webjars结构 4. 解析源码 5. 测试访问 方式二:放入静态资源目录 1. 源码分析 2. 测 ...

  9. Yolov3Yolov4网络结构与源码分析

    Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 论文汇总 ...

最新文章

  1. md5-linux_shell
  2. 数据结构实验之二叉树五:层序遍历(STL和模拟队列两种方法)
  3. DNS 截持模拟及环境搭建
  4. Web 趋势榜:上周最热门、又实用的 10 大 Web 项目 - 210813
  5. ​GPLinker:基于GlobalPointer的实体关系联合抽取
  6. 552. 学生出勤记录 II
  7. 什么是脏数据?怎样用箱形图分析异常值?终于有人讲明白了
  8. 慢连接攻击的原理和防范
  9. jquery基本过滤选择器(jquery筛选选择器)
  10. Gstreamer之gst-plugin-bad交叉编译集成x265(二十二)
  11. bootstrap table分页limit计算pageIndex和pageSize
  12. fread函数 linux在哪,fread函数返回值
  13. dell bios 恢复出厂设置
  14. 记忆力:魔方基础教程
  15. 一键seo提交收录_做SEO优化长尾关键词排名你需要这些网站收录提交入口资源
  16. 1.7.1 计算机网络体系结构的形成
  17. 阿里云香港节点全面故障给我们的启示
  18. python获取时间戳算法_Python 获取时间,时间戳,时间差
  19. 【物联网】物联网开发从入门到精通
  20. 程序员免费自学编程的8大网站!

热门文章

  1. InheritParasitic.js
  2. Python学习笔记(十五):类基础
  3. Jquery加载dom元素
  4. 拖拖拽拽画JAVA报表?
  5. NanoPi NEO Air使用十六:使用python做开发
  6. STM32H7的FDCAN
  7. NR 5G 安全架构概述
  8. IBM AI辩手对战世界级人类辩手,炒作还是秀肌肉?
  9. 【WPF】对话框/消息弹窗
  10. Hibernate简介2