mochiweb源码阅读3-消息交互

上篇主要梳理的是mochiweb整体连接的处理机制,这篇主要梳理mochiweb如何和外界进行交互
接下来我们回到mochiweb_acceptor文件中init/4函数,我们已经走完了do_accept/2函数路径,接下来继续往下看,这里为了方便查看,再贴一遍mochiweb_acceptor:init/4代码
init(Server, Listen, Loop, Opts) ->
    case catch do_accept(Server, Listen) of
        {ok, Socket} ->
            call_loop(Loop, Socket, Opts);
        {error, Err} when Err =:= closed orelse
                          Err =:= esslaccept orelse
                          Err =:= timeout ->
            exit(normal);
        Other ->
            %% Mitigate out of file descriptor scenario by sleeping for a
            %% short time to slow error rate
            case Other of
                {error, emfile} ->
                    receive
                    after ?EMFILE_SLEEP_MSEC ->
                            ok
                    end;
                _ ->
                    ok
            end,
            error_logger:error_report(
              [{application, mochiweb},
               "Accept failed error",
               lists:flatten(io_lib:format("~p", [Other]))]),
            exit({error, accept_failed})
    end.
执行完do_accept/2若执行正常则执行call_loop/3,我们现在从call_loop/3开始分析
call_loop({M, F}, Socket, Opts) ->
    M:F(Socket, Opts);
call_loop({M, F, [A1]}, Socket, Opts) ->
    M:F(Socket, Opts, A1);
call_loop({M, F, A}, Socket, Opts) ->
    erlang:apply(M, F, [Socket, Opts | A]);
call_loop(Loop, Socket, Opts) ->
    Loop(Socket, Opts).
这里可以看到call_loop四次重载仅仅存在第一个参数格式的不同或者为空,可以查看源码阅读2得知Loop应为{mochiweb_http,loop,[{keepalive,loop}]}由此可知会调用call
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值