一. 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

[转]erlang ranch的更多相关文章

  1. [Erlang 0105] Erlang Resources 小站 2013年1月~6月资讯合集

    很多事情要做,一件一件来; Erlang Resources 小站 2013年1月~6月资讯合集,方便检索.      小站地址: http://site.douban.com/204209/     ...

  2. Erlang C1500K长连接推送服务-性能

    Whatsapp已经使用Erlang在生产环境跑到96GB内存单机 3M长连接,参加:WhatsApp的Erlang世界.毕竟业务级别能达到Whatsapp那样极少,现在只有千万级,单机太多挂一台影响 ...

  3. Erlang&RabbitMQ服务安装配置

    RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发.RabbitMQ据说具有良 ...

  4. cowboy-高性能简洁的erlang版web框架

    那么Cowboy是什么呢? Cowboy is a small, fast and modular HTTP server written in Erlang. 其定位非常明确: Cowboy aim ...

  5. erlang怎样有效监听大量并发连接

    看了erlang的一些开源网络框架RabbitMQ.Ranch.他们都使用多个进程同一时候accept一个socket. 这样的方式在使得socketport监听的工作分担了很多其它的调度机会.可是, ...

  6. erlang如何有效地监视大量的并发连接

    阅读erlang一些开源web框架RabbitMQ.Ranch,他们使用多个进程在同一时间accept一socket.以这样的方式,使socketport监控共享很多其他的机会调度工作,但,在erla ...

  7. Erlang cowboy 架构

    Erlang cowboy Architecture架构 Erlang cowboy参考: http://ninenines.eu/docs/en/cowboy/1.0/guide/ 本章Archit ...

  8. Erlang cowboy 入门参考

    Erlang cowboy 入门参考 cheungmine,2014-10-28 本文翻译自: http://ninenines.eu/docs/en/cowboy/HEAD/guide/gettin ...

  9. ranch 源码分析(一)

    以前写了一个ranch的处理流程,http://www.cnblogs.com/tudou008/p/5197314.html ,就只有一张图,不是很清晰,现在有空做个源码分析. ranch的源码(版 ...

随机推荐

  1. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第一篇:准备工作

    摘要      本文将简要介绍这个文章系列的目的.形式及大体内容.并且完成开始学习这个系列前所必要的准备工作. 前言      ASP.NET MVC作为微软官方的MVC解决方案,推出有一段时间了.可 ...

  2. JQuery源码解析 目录

    1. a.$查询符号就是放在沙盒里面的: window.jQuery = window.$ = jQuery; b.一个jQuery对象无 new 构造: eg: $("#text" ...

  3. 【Codeforces Round #446 (Div. 2) A】Greed

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 贪心选容量大的瓶子就好 [代码] #include <bits/stdc++.h> #define int long l ...

  4. Java对ad操作

    转载:http://blog.csdn.net/binyao02123202/article/details/18697953

  5. ARCGIS刷新的故事

    转自原文章ARCGIS部分刷新 1, IActiveView.Refresh 全局刷新,即重绘地图中的所有内容,是效率最低的一种刷新方法.当数据量大时非常耗时.所以除非绝对必要,一般推荐使用IActi ...

  6. H5移动端IOS/Android兼容性总结,持续更新中…

    H5移动端IOS/Android兼容性总结,持续更新中… 1. IOS不识别日期 new Date("2018-07-01 08:00:00")在Android下正常显示可以直接进 ...

  7. Vue里父子组间的通讯

    父组件代码 <template> <div> <child @child-say="listenToBoy" :mes=count></c ...

  8. 网站图标——favicon

    首先推荐一个网站图标在线制作工具favicon: 插入图标只需在head中间加入以下代码: <link rel="icon" href="img/favicon.i ...

  9. 怎样判断一个P2P平台是否靠谱?

    判断一个网站,是否靠谱,是有规律可循的,P2P平台算是个新兴的电商类网站.   网上欺诈类的网站,不限于P2P,实在是太多了,真的有必要总结下最关键的几个靠谱指标.   最关键的2个   1.创始人和 ...

  10. POJ 1952 BUY LOW, BUY LOWER DP记录数据

    最长递减子序列.加记录有多少个最长递减子序列.然后须要去重. 最麻烦的就是去重了. 主要的思路就是:全面出现反复的值,然后还是同样长度的子序列.这里的DP记录的子序列是以当前值为结尾的时候,而且一定选 ...