zoukankan      html  css  js  c++  java
  • [转]erlang ranch

    一. ranch app启动:

    ranch_sup ->

        ranch_server % 创建ets, 并提供接口给其他进程读写

    二. 启动diy app (监听模块: 用ranch_tcp -> gen_tcp中的方法, 而不是prim_inet)

    ranch:start_listener方法 -> ranch_sup:start_child

    ranch_listener_sup -> % 默认每个acceptor最大1024个连接

    ranch_conn_sup % 等待acceptor发送消息

    ranch_acceptor_sup -> % 如果没传listen socket, 自动开启

    ranch_acceptor

    % 根据ranch:start_listener第二个参数启动N个acceptor

    % 等待新的请求

    三. 收到请求:

    1. ranch_acceptor接收到Client Socket

    (新版erlang支持多进程同时调用gen_tcp:recv)

    将Client Socket控制权(ranch_tcp:controlling_process)交给ranch_conn_sup

    向ranch_conn_sup发消息

    {ranch_conn_sup, start_protocol, acceptor pid(), Client Socket}

    等待ranch_conn_sup返回消息

    ( ranch_conn_sup在这里延长时间回复, 实现限制最大连接数 )

    2. ranch_conn_sup(非supervisor)收到client socket

    根据protocol参数启动protocol_handler

    然后计算当前连接数是否超标

    超标就不给当前的acceptor回消息( 对应第二小步最后 )

    并将当前acceptor pid保存到一个休眠列表

    3. protocol_handler处理完退出消息发给ranch_conn_sup

    ranch_conn_sup收到后递减连接数

    弹出一个休眠列表的acceptor并发消息回复使其激活



    单端口最大连接数 = max connection + acceptor总数 – 1

    ranch




  • 相关阅读:
    JAVA基础补漏--文件读取
    JAVA-Lambda表达式
    JAVA基础补漏--可变参数
    JAVA基础补漏--SET
    Apache ab 测试结果的分析
    同源策略和跨域问题
    php curl 伪造IP来源的实例代码
    HTTP状态码详解
    PHP 根据IP地址获取所在城市
    MySQL MERGE存储引擎 简介及用法
  • 原文地址:https://www.cnblogs.com/fvsfvs123/p/4178117.html
Copyright © 2011-2022 走看看