ranch分析学习(三)

接着上一篇继续研究

上一篇结尾的时候,我们谈到了连接,监听两个监督树,今天我们就来看看这两个监督树和他们的工作者都是干什么的,怎么实现的。文件编号接上篇。

6. ranch_acceptors_sup.erl 

 1 -module(ranch_acceptors_sup).
 2 -behaviour(supervisor).
 3
 4 -export([start_link/4]).
 5 -export([init/1]).
 6
 7 -spec start_link(ranch:ref(), non_neg_integer(), module(), any())
 8     -> {ok, pid()}.
 9 start_link(Ref, NbAcceptors, Transport, TransOpts) ->
10     supervisor:start_link(?MODULE, [Ref, NbAcceptors, Transport, TransOpts]).
11
12 init([Ref, NbAcceptors, Transport, TransOpts]) ->
13     ConnsSup = ranch_server:get_connections_sup(Ref),
14     LSocket = case proplists:get_value(socket, TransOpts) of
15         undefined ->
16             {ok, Socket} = Transport:listen(TransOpts),
17             Socket;
18         Socket ->
19             Socket
20     end,
21     {ok, {_, Port}} = Transport:sockname(LSocket),
22     ranch_server:set_port(Ref, Port),
23     Procs = [
24         {{acceptor, self(), N}, {ranch_acceptor, start_link, [
25             LSocket, Transport, ConnsSup
26         ]}, permanent, brutal_kill, worker, []}
27             || N <- lists:seq(1, NbAcceptors)],
28     {ok, {{one_for_one, 10, 10}, Procs}}.

这个文件我主要来看看在 init 里面都干了些什么事情。主要是给监听连接进程设置参数,然后生成多个子进程做连接监听处理。整个文件看过otp设计规范的不难理解明白。

在看下一个文件前,请大家移步到这里详细了解 proc_lib 否则有些地方可能看不明白。

7.ranch_conns_sup.erl

这个文件虽然也是在监督树下面的工作者,但是并没采用gen_server回调模块实现。那假设我们要实现类似的功能,我要实现那些函数呢这个其实没有严格的限制 在我们设置监督树子进程的时候配置对应的参数都是都可以的。这样文字说明可能不清楚,我结合代码具体的说明。

Procs = [
        {{acceptor, self(), N}, {ranch_acceptor, start_link, [
            LSocket, Transport, ConnsSup
        ]}, permanent, brutal_kill, worker, []}
            || N <- lists:seq(1, NbAcceptors)],

大家请看上面的代码中的 start_link,这个就是子进程启动的入口,子进程必须要导出这个函数,后[LSocket, Transport, ConnsSup]  这个是 前面start_link 接收的参数。 自己编码实现子进程的时候我们可以起名为任意名称,只要在设置进程规范的和导出的初始函数对应就行。当然为了统一好理解好事 起名start_link看起来更加的规范。导出函数的返回还是有严格规定的,启动成功必须返回{ok,pid}.否则整个就会启动失败的。当然如果你要标新立异在gen_server启动的时候 start_link你也可以改名。

ranch分析学习(三)

时间: 2024-11-07 12:16:18

ranch分析学习(三)的相关文章

ranch分析学习(一)

Ranch 是一个tcp处理的程序框架.官方的解释  Ranch is a socket acceptor pool for TCP protocols. 主要目的是提供一个方便,易用,高效,稳定的tcp处理基础程序.前面我也用它作为基础写了个简易的聊天的程序.cowboy底层通信处理也是ranch处理,聊聊数十个个文件做为基础的http服务器.今天我们就来看看它到底有什么魔力.废话不多,接下的几天我将分析它,说说我的学习心得.如果有什么地方说的不对还请大家指正. 源码下载地址: https:/

ranch分析学习(四)

经过的前面的梳理,整个ranch框架的结构,大致有了一个清晰的脉络,即使我说的不是很清楚大家也基本能阅读懂源码.下面我继续分析剩下的的几个文件. 7.ranch_transport.erl 这个文件是一个自定义的的erlang行为模式,主要规范实现这个行为模式的子类必须要实现那个函数,整个函数分为行为callback的定义,模块函数的定义. 模块函数的实现sendfile. 具体实现了这个行为模式定义的callback的模块有(ranch_tcp.erl,ranch_ssl.erl) 这两个文件

ranch分析学习(二)

紧接上篇,今天我们来分析监督树的工作者,打工仔执行任务的人.废话不多少我们直接进入正题. 3.ranch_server.erl   整个文件的功能主要是存储tcp对应参数的的信息.信息的存储方式采用的ets内存表的方式存储方式.当然有需求也可以采用mnesia来存储对应的数据.不过除非需要大规模集群处理,需要相同的配置,相同的参数可以考虑采用mnesia保存消息.当然有需求的同学可以自行改造. 整个代码文件遵守opt设计规范进行编写,调用api 和 行为模式回调方法分开.至于为什么要这样干,这个

ranch 源码分析(三)

接上ranch 源码分析(二) 上次讲到了ranch_conns_sup和ranch_acceptors_sup这2个ranch的核心模块,我们接着分析 首先查看ranch_conns_sup.erl -module(ranch_conns_sup). %% API. -export([start_link/6]). -export([start_protocol/2]). -export([active_connections/1]). %...... 省略若干行 %% API. -spec

对discuz的代码分析学习(三)mysql驱动

一. 属性分析         1.tablepre :表名称前缀        2.version : 数据库版本        3.drivertype:驱动类型        4.querynum:查询数        5.curlink:当前连接        6.link:存储连接资源        7.config:配置项        8.sqldebug:sql调试        9.slaveid:不知道       10.map: 不知道 二. 方法分析 1.db_mysql

Deep Learning(深度学习)学习笔记整理系列之(三)

Deep Learning(深度学习)学习笔记整理系列 [email protected] http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04-08 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主

Javascript 中的回调函数和递归函数简单实际分析学习

Javascript 中的回调函数和递归函数简单实际分析学习 1 回调函数 所谓回调函数简单理解就是将一个函数做为参数传递给其他的函数供其使用.(只是在js中,因为其它的语言中有指针这个概念). 举一个简单的例子,当我们在统计账单的时候就要整理材料这些,然后就需要计算器,计算器我们想象成为一个可以实现计算的函数.统计账单是另外的另一个函数,当统计账单的时候就会需要计算器这个函数的支持,其实这就是一个简单的回调.可以按这个理解. 下来我借用网上的一个例子: //先定义一个函数fun1 functi

深度学习三

转载:http://blog.csdn.net/zouxy09/article/details/8775518 目录: 一.概述 二.背景 三.人脑视觉机理 四.关于特征 4.1.特征表示的粒度 4.2.初级(浅层)特征表示 4.3.结构性特征表示 4.4.需要有多少个特征? 五.Deep Learning的基本思想 六.浅层学习(Shallow Learning)和深度学习(Deep Learning) 七.Deep learning与Neural Network 八.Deep learnin

大数据分析学习之路

大数据分析学习之路 目录: 一.大数据分析的五个基本方面 二.如何选择适合的数据分析工具 三.如何区分三个大数据热门职业 四.从菜鸟成为数据科学家的 9步养成方案 五.从入门到精通--快速学会大数据分析                             一.大数据分析的五个基本方面 1,可视化分析 大数据分析的使用者有大数据分析专家,同时还有普通用户,但是他们二者对于大数据分析最基本的要求就是可视化分析,因为可视化分析能够直观的呈现大数据特点,同时能够非常容易被读者所接受,就如同看图说话一