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




  • 相关阅读:
    Map 循环出key 和 value
    Jquery Validate
    Cookie/Session机制详解
    Java根据sessionId获取Session对象
    在线用户统计二
    页面在线访问人数统计&&在线登录人数统计一
    在线会话管理
    oneworld元数据配置
    java map遍历
    黑马程序员——C语言位运算符
  • 原文地址:https://www.cnblogs.com/fvsfvs123/p/4178117.html
Copyright © 2011-2022 走看看