EMQX源码分析---esockd_acceptor_sup源码分析

该模块主要是启动一个监督者模块esockd_acceptor_sup,该模块主要是对esockd_acceptor模块的工作进程进程监督。该模块对外提供了三个函数,分别如下:
1、start_link(ConnSup, TuneFun, UpgradeFuns, StatsFun, LimitFun):该函数被esockd_listener_sup模块的start_link函数内部调用,所以esockd_acceptor_sup监督者模块被esockd_listener_sup模块监听。start_link(ConnSup, TuneFun, UpgradeFuns, StatsFun, LimitFun) 函数内部调用supervisor:start_link(?MODULE, [ConnSup, TuneFun, UpgradeFuns, StatsFun, LimitFun]).函数,然后会回到该模块的init([ConnSup, TuneFun, UpgradeFuns, StatsFun, LimitFun])函数。

2、start_acceptor(AcceptorSup, LSock): 该函数是启动一个socket接收进程。

3、count_acceptors(AcceptorSup):计算该接收socket的监听进程下启动了多少个accept工作进程,处理并发socket连接。

esockd_acceptor_sup的源码如下:

-module(esockd_acceptor_sup).
-behaviour(supervisor).

-export([start_link/5]).
-export([start_acceptor/2, count_acceptors/1]).

%% Supervisor callbacks
-export([init/1]).

%%------------------------------------------------------------------------------
%% API
%%------------------------------------------------------------------------------

%% @doc Start Acceptor Supervisor.
-spec(start_link(pid(), esockd:sock_fun(), [esockd:sock_fun()], fun(), fun()) -> {ok, pid()}).
start_link(ConnSup, TuneFun, UpgradeFuns, StatsFun, LimitFun) ->
    supervisor:start_link(?MODULE, [ConnSup, TuneFun, UpgradeFuns, StatsFun, LimitFun]).

%% @doc Start a acceptor. 启动一个socket接收器
-spec(start_acceptor(pid(), inet:socket()) -> {ok, pid()} | ignore | {error, term()}).
start_acceptor(AcceptorSup, LSock) ->
    supervisor:start_child(AcceptorSup, [LSock]).

%% @doc Count acceptors. 计算 acceptors 的个数
-spec(count_acceptors(AcceptorSup :: pid()) -> pos_integer()).
count_acceptors(AcceptorSup) ->
    length(supervisor:which_children(AcceptorSup)).

%%------------------------------------------------------------------------------
%% Supervisor callbacks
%% TuneFun 读写buffer调整函数
%% UpgradeFuns 升级函数
%% StatsFun 状态统计函数
%% LimitFun 限制函数
%%------------------------------------------------------------------------------

init([ConnSup, TuneFun, UpgradeFuns, StatsFun, LimitFun]) ->
%%  定义启动esockd_acceptor模块的进程规范,然后会回调esockd_acceptor的start_link方法
    Acceptor = #{id => acceptor, start => {esockd_acceptor, start_link, [ConnSup, TuneFun, UpgradeFuns, StatsFun, LimitFun]},
                 restart => transient, shutdown => 1000, type => worker, modules => [esockd_acceptor]},
    {ok, {{simple_one_for_one, 100, 3600}, [Acceptor]}}.

接下来将介绍 esockd_listener 模块。

insert overwrite table discountdw.dwd_sd_adds_order_bill_inc partition(dt = '2023-06-06') select t1.order_bill_id, t1.counterfoil_no, t1.acceptor, date_format(to_utc_timestamp(cast(t1.expiry_date as bigint) ,'GMT-8'),'YYYY-MM-dd'), t2.company_id, t1.cert_no, t1.company_name, t1.third_order_id, t1.counterfoil_amt/10000, t1.transaction_amt/10000, t1.rate, '3bp' as service_tariffing, ((DATEDIFF(to_utc_timestamp(t1.expiry_date ,'GMT-8'),to_utc_timestamp(t1.transaction_date ,'GMT-8') ) + adjust_days)* 0.0003 *(counterfoil_amt))/ 360 as service_fee, 360 as total_days, DATEDIFF(to_utc_timestamp(t1.expiry_date ,'GMT-8'),to_utc_timestamp(t1.transaction_date ,'GMT-8') ) + adjust_days as modulation_date, t3.channel_type, t3.bank_name, date_format(to_utc_timestamp(cast(t1.transaction_date as bigint) ,'GMT-8'),'YYYY-MM-dd'), t1.order_status_code, t1.order_status_msg, t4.fee_amt, t4.status, t1.tenant_id, t5.revenue, to_utc_timestamp(cast(t1.create_date as bigint) ,'GMT-8'), to_utc_timestamp(cast(t1.update_date as bigint) ,'GMT-8') from (select * from discountdw.ods_adds_order_bill_inc where dt ='2023-06-06' and channel_id=101110004 )t1 left join (select * from mecdw.ods_company_full where platform_id='sdpjw')t2 on t1.cert_no=t2.cert_no and t1.tenant_id=t2.tenant_id left join discountdw.dim_adds_product_full t3 on t1.partner_id=t3.partner_id and t1.product_id=t3.product_id left join (select * from mecdw.dwd_sc_fee_record_full where dt='2023-06-06' and biz_type=2 ) t4 on t1.order_bill_id=t4.third_id left join (select * from discountdw.ods_sd_order_ext_inc where dt='2023-06-06') t5 on t1.order_bill_id=t5.order_bill_id left join sdpjwdw.dim_holiday_info_full t6 on date_format(to_utc_timestamp(t1.expiry_date ,'GMT-8'),'YYYY-MM-dd') = t6.civic_holiday ;
06-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值