[转]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


[转]erlang ranch的更多相关文章
- [Erlang 0105] Erlang Resources 小站 2013年1月~6月资讯合集
很多事情要做,一件一件来; Erlang Resources 小站 2013年1月~6月资讯合集,方便检索. 小站地址: http://site.douban.com/204209/ ...
- Erlang C1500K长连接推送服务-性能
Whatsapp已经使用Erlang在生产环境跑到96GB内存单机 3M长连接,参加:WhatsApp的Erlang世界.毕竟业务级别能达到Whatsapp那样极少,现在只有千万级,单机太多挂一台影响 ...
- Erlang&RabbitMQ服务安装配置
RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发.RabbitMQ据说具有良 ...
- cowboy-高性能简洁的erlang版web框架
那么Cowboy是什么呢? Cowboy is a small, fast and modular HTTP server written in Erlang. 其定位非常明确: Cowboy aim ...
- erlang怎样有效监听大量并发连接
看了erlang的一些开源网络框架RabbitMQ.Ranch.他们都使用多个进程同一时候accept一个socket. 这样的方式在使得socketport监听的工作分担了很多其它的调度机会.可是, ...
- erlang如何有效地监视大量的并发连接
阅读erlang一些开源web框架RabbitMQ.Ranch,他们使用多个进程在同一时间accept一socket.以这样的方式,使socketport监控共享很多其他的机会调度工作,但,在erla ...
- Erlang cowboy 架构
Erlang cowboy Architecture架构 Erlang cowboy参考: http://ninenines.eu/docs/en/cowboy/1.0/guide/ 本章Archit ...
- Erlang cowboy 入门参考
Erlang cowboy 入门参考 cheungmine,2014-10-28 本文翻译自: http://ninenines.eu/docs/en/cowboy/HEAD/guide/gettin ...
- ranch 源码分析(一)
以前写了一个ranch的处理流程,http://www.cnblogs.com/tudou008/p/5197314.html ,就只有一张图,不是很清晰,现在有空做个源码分析. ranch的源码(版 ...
随机推荐
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第一篇:准备工作
摘要 本文将简要介绍这个文章系列的目的.形式及大体内容.并且完成开始学习这个系列前所必要的准备工作. 前言 ASP.NET MVC作为微软官方的MVC解决方案,推出有一段时间了.可 ...
- JQuery源码解析 目录
1. a.$查询符号就是放在沙盒里面的: window.jQuery = window.$ = jQuery; b.一个jQuery对象无 new 构造: eg: $("#text" ...
- 【Codeforces Round #446 (Div. 2) A】Greed
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 贪心选容量大的瓶子就好 [代码] #include <bits/stdc++.h> #define int long l ...
- Java对ad操作
转载:http://blog.csdn.net/binyao02123202/article/details/18697953
- ARCGIS刷新的故事
转自原文章ARCGIS部分刷新 1, IActiveView.Refresh 全局刷新,即重绘地图中的所有内容,是效率最低的一种刷新方法.当数据量大时非常耗时.所以除非绝对必要,一般推荐使用IActi ...
- H5移动端IOS/Android兼容性总结,持续更新中…
H5移动端IOS/Android兼容性总结,持续更新中… 1. IOS不识别日期 new Date("2018-07-01 08:00:00")在Android下正常显示可以直接进 ...
- Vue里父子组间的通讯
父组件代码 <template> <div> <child @child-say="listenToBoy" :mes=count></c ...
- 网站图标——favicon
首先推荐一个网站图标在线制作工具favicon: 插入图标只需在head中间加入以下代码: <link rel="icon" href="img/favicon.i ...
- 怎样判断一个P2P平台是否靠谱?
判断一个网站,是否靠谱,是有规律可循的,P2P平台算是个新兴的电商类网站. 网上欺诈类的网站,不限于P2P,实在是太多了,真的有必要总结下最关键的几个靠谱指标. 最关键的2个 1.创始人和 ...
- POJ 1952 BUY LOW, BUY LOWER DP记录数据
最长递减子序列.加记录有多少个最长递减子序列.然后须要去重. 最麻烦的就是去重了. 主要的思路就是:全面出现反复的值,然后还是同样长度的子序列.这里的DP记录的子序列是以当前值为结尾的时候,而且一定选 ...