ranch分析学习(一)】的更多相关文章

Ranch 是一个tcp处理的程序框架.官方的解释  Ranch is a socket acceptor pool for TCP protocols. 主要目的是提供一个方便,易用,高效,稳定的tcp处理基础程序.前面我也用它作为基础写了个简易的聊天的程序.cowboy底层通信处理也是ranch处理,聊聊数十个个文件做为基础的http服务器.今天我们就来看看它到底有什么魔力.废话不多,接下的几天我将分析它,说说我的学习心得.如果有什么地方说的不对还请大家指正. 源码下载地址: https:/…
经过的前面的梳理,整个ranch框架的结构,大致有了一个清晰的脉络,即使我说的不是很清楚大家也基本能阅读懂源码.下面我继续分析剩下的的几个文件. 7.ranch_transport.erl 这个文件是一个自定义的的erlang行为模式,主要规范实现这个行为模式的子类必须要实现那个函数,整个函数分为行为callback的定义,模块函数的定义. 模块函数的实现sendfile. 具体实现了这个行为模式定义的callback的模块有(ranch_tcp.erl,ranch_ssl.erl) 这两个文件…
接着上一篇继续研究 上一篇结尾的时候,我们谈到了连接,监听两个监督树,今天我们就来看看这两个监督树和他们的工作者都是干什么的,怎么实现的.文件编号接上篇. 6. ranch_acceptors_sup.erl -module(ranch_acceptors_sup). -behaviour(supervisor). -export([start_link/]). -export([init/]). -spec start_link(ranch:ref(), non_neg_integer(),…
紧接上篇,今天我们来分析监督树的工作者,打工仔执行任务的人.废话不多少我们直接进入正题. 3.ranch_server.erl   整个文件的功能主要是存储tcp对应参数的的信息.信息的存储方式采用的ets内存表的方式存储方式.当然有需求也可以采用mnesia来存储对应的数据.不过除非需要大规模集群处理,需要相同的配置,相同的参数可以考虑采用mnesia保存消息.当然有需求的同学可以自行改造. 整个代码文件遵守opt设计规范进行编写,调用api 和 行为模式回调方法分开.至于为什么要这样干,这个…
第一次尝试使用Office Word,方便程度大大超过网页在线编辑,不过初次使用,一些内容不甚熟悉,望各位大神见谅~ 在上次的文章中,把整个jQuery的结构进行了梳理,得到了整个jQuery的简化结构,如下: (function(){ (21 , 94) 定义了一些变量和函数 jQuery = function(){}; (96 , 283) 给JQ对象,添加一些方法和属性 (285 , 347) extend : JQ的继承方法 (349 , 817) jQuery.extend() : 扩…
接上 ranch 源码分析(三) 在上一次,根据ranch源码把大概流程理了一遍,下面我们将一些细节解释一下. ranch只是一个服务的框架,它提供了传输层协议代码(ranch_tcp 和ranch_ssl), 大概可以看看这2个的源码,其实就是gen_tcp和gen_ssl的封装. 它做的工作可以分成 1.根据port配置开启一个端口的linsten,(具体见ranch_acceptors_sup.erl代码) 2.然后开启N个(根据设置)进程accpet等待client的连接, (具体见ra…
Properties are either atomic or nonatomic, The difference has to do with multithreading. atomic is the default value. Properties are either readonly or readwrite. readwrite is the default value. Whenever you declare a property that points to an NSStr…
以前写了一个ranch的处理流程,http://www.cnblogs.com/tudou008/p/5197314.html ,就只有一张图,不是很清晰,现在有空做个源码分析. ranch的源码(版本v1.2.1 下载链接https://github.com/ninenines/ranch.git) 我们从一个最简单的例子开始 tcp_echo [root@erlang004 ranch-master]# pwd /home/erlang/ranch-master [root@erlang00…
接上ranch 源码分析(二) 上次讲到了ranch_conns_sup和ranch_acceptors_sup这2个ranch的核心模块,我们接着分析 首先查看ranch_conns_sup.erl -module(ranch_conns_sup). %% API. -export([start_link/6]). -export([start_protocol/2]). -export([active_connections/1]). %...... 省略若干行 %% API. -spec…
接上ranch 源码分析(一) 上次讲到了ranch.erl的start_listener函数,下面我们详细分析下这个函数 -module(ranch). %...... 省略若干行 -spec start_listener(ref(), non_neg_integer(), module(), any(), module(), any()) -> supervisor:startchild_ret(). start_listener(Ref, NbAcceptors, Transport, T…
ranch是开发服务端管理模板,这个模板不大,写的很经典,方便并发管理,而且性能很优秀~~ 其中比较优秀的就有cowboy~~ 看了一下ranch的源码(版本v1.2.1 下载链接https://github.com/ninenines/ranch.git)整理了一下处理流程,做个笔记,以后有空再详细研究一下.…
python数据分析学习目录 Anaconda的安装和更新 矩阵NumPy pandas数据表 matplotlib-2D绘图库学习目录                      …
activiti源码分析学习导语 目前项目中用activiti来做工作流的相关工作,最近遇到一些情况下,公司二次开发的流程图渲染出现了问题,会造成流程图出不来的情况.初步分析数据库中记录以及简单的代码跟踪,发现绘制流程路线图时,是按to_number(id_)来进行排序,预期是先发生的行为它的id_字段一定小. select * from act_hi_actinst order by to_number(id_); 但是跟踪时候,发现明明后发生的行为,但是id_字段值却还更小: 于是觉得是Id…
分析学习MYSQL源代码需要哪些方面的知识呢? 哪些书籍或网站对这方面有帮助呢? 60d…
最近要看一下erlang连接池,觉得ranch很不错. github上面有人写了ranch的代码阅读,可以看一下,链接在这里. 1. ranch可以同时监听多个端口,每个端口的连接信息可以单独配置. 每个端口的监听信息通过ranch_server进程记录,然后获取信息可以从ets表读取.因为配置信息很少修改,而获取信息比较多.这样的读写分离比较方便并发. 2. 每个连接可以设置最大连接数,通过ranch_conns_sup.erl模块控制. 每个连接过来,连接池都会通知ranch_conns_s…
在 erlang游戏开发tcp 我们建立起了自己的socket tcp 服务器的基本骨架.当时面对并发情况下,多人同一时刻连接服务器的时候,我们的基本骨架 还是难以应付处理.这就使我不得不想对这样的情况如何去处理.怎么处理呢? 预先开多个线程侦听连接,侦听到有连接后重新开线程处理当前连接,然后继续侦听连接.当然要自己处理这样的事情,也花费不到多少的时间.但是要弄成成熟稳定的骨架估计还是要花费一段时间的.本着不重复造轮子的原则.在这里我找到了大名鼎鼎cowboy使用的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 % 等待accep…
插值函数代码分析学习,用的CImage类load图像. // Imagejoint.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "Imagejoint.h" #include "math.h" #include <afxwin.h> #ifdef _DEBUG #define new DEBUG_NEW #endif #include <atlimage.h>/…
ranch 整体理解 从整体上的话,ranch主要是三层的监控树 第一层 ranch_sup,负责整个应用的启动,启动了ranch_server进程,它管理了整个应用的配置和连接数据 第二层 ranch_listener_sup,负责连接的管理 第三层 ranch_conns_sup和ranch_acceptors_sup,这两个分别用来处理新的连接和获得新的连接 当然最底层的ranch_acceptor是应用中的重要角色,每当有新的连接,都会把控制权交给ranch_conns_sup,由它统一…
转载于:http://www.techbulo.com/1198.html v4l2_device v4l2_device在v4l2框架中充当所有v4l2_subdev的父设备,管理着注册在其下的子设备.以下是v4l2_device结构体原型(去掉了无关的成员): struct v4l2_device { structlist_head subdevs; //用链表管理注册的subdev charname[V4L2_DEVICE_NAME_SIZE]; //device 名字 structkre…
转载于http://www.techbulo.com/1193.html 1.概述 Video4Linux2是Linux内核中关于视频设备的内核驱动框架,为上层的访问底层的视频设备提供了统一的接口.凡是内核中的子系统都有抽象底层硬件的差异,为上层提供统一的接口和提取出公共代码避免代码冗余等好处.就像公司的老板一般都不会直接找底层的员工谈话,而是找部门经理了解情况,一个是因为底层屌丝人数多,意见各有不同,措辞也不准,部门经理会把情况汇总后再向上汇报:二个是老板时间宝贵. V4L2支持三类设备:视频…
初始化SparkContext 1// 在java中初始化spark import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaSparkContext; SparkConf conf=new SparkConf().setMaster("local").setAppName("my app"); //集群url:本例是运行在本地单机local:应用名,可以在集群管理器用户界面中找…
20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这学期开始学习Linux,刚刚接触,也是不容易的坚持了下来.第一次学习这种网上课堂,形式非常的新颖,图文结合,并且孟老师教授的也很详细,一些概念也说的通俗易懂,这个课程整个学习下来还是受益匪浅. 现在整个网课的学习过程已经结束,按照孟老师的要求写一份关于Linux的总结和报告,有许多不足之处,欢迎大家指正,希望能一起…
今天在课堂上,老师用到了SimpleAdapter,然后女神在边上问我为什么这个SimpleAdapter不能做到我app那种带有进度条的效果,言语说不清,然后就开始看源代码,发现这个Adapter的实现方式还真的应该好好去研究下,收获还是很多的. 先看构造函数,构造函数传进来一个数据源List<Map>,一个布局文件的Id(resource),一个字符串数组是对应Map里面的Key,还有一个整型数组对应item布局中的每个控件的ID public SimpleAdapter(Context…
http://www.zhihu.com/question/22119753 http://www.zhihu.com/question/20757000 ****************************************** http://www.zhihu.com/question/29265587/answer/123961440 https://zhuanlan.zhihu.com/p/22842649 https://zhuanlan.zhihu.com/p/224196…
http://www.ccvita.com/121.htmljQuery工作原理解析以及源代码示例http://www.cnblogs.com/haogj/archive/2010/04/19/1715762.htmljquery原型关系图 http://www.ihiro.org/blog/wp-content/uploads/2010/08/sizzle_flow1.jpgjquery选择器http://www.cnblogs.com/lovesueee/archive/2012/10/18…
http://www.ccvita.com/121.htmljQuery工作原理解析以及源代码示例http://www.cnblogs.com/haogj/archive/2010/04/19/1715762.htmljquery原型关系图 http://www.ihiro.org/blog/wp-content/uploads/2010/08/sizzle_flow1.jpgjquery选择器http://www.cnblogs.com/lovesueee/archive/2012/10/18…
Spart是什么 Spart是一个用来实现快速而而通用的集群计算平台. 在速度方面,Spart扩展了广泛使用的Mapreduce计算模型,而且高效的支持更多的计算模式,包括交互式查询和流处理.Spart的一个主要特点是能够在内存中进行计算,因而更快.即使必须在硬盘上进行复杂计算,Spart依然比Mapreduce快. Spart适用于各种各样原先需要多种不同分布式平台的场景,包括批处理,迭代算法,交互式查询,流处理.通过在一个统一的框架下支持这些不同的计算,Spart使我们可以简单而低耗的把各种…
只是大致分析下执行流程,主要就是取得mod参数的值,根据取值加载控制器,控制器位置在最后一行指定了. 1 )定义应用名称,加载两个必要文件 define('APPTYPEID', 2); define('CURSCRIPT', 'forum'); require './source/class/class_core.php';//核心类 require './source/function/function_forum.php';//论坛函数库 2 )modarray数组限定了mod取值范围 $…
一. 属性分析         1.tablepre :表名称前缀        2.version : 数据库版本        3.drivertype:驱动类型        4.querynum:查询数        5.curlink:当前连接        6.link:存储连接资源        7.config:配置项        8.sqldebug:sql调试        9.slaveid:不知道       10.map: 不知道 二. 方法分析         1.…