- 博客(34)
- 资源 (9)
- 收藏
- 关注
转载 nginx 源码学习笔记(五)——nginx精粹-模块
我们之前说过模块的上下文分别对应四种结构体分别是ngx_core_module_t、ngx_event_module_t、ngx_http_module_t、ngx_mail_module_t分别对应四类模块[cpp] view plaincopyprint?src/core/ngx_conf_file
2015-11-28 16:54:34 428
转载 nginx 源码学习笔记(四)——nginx精粹-模块
接下来,继续理解helloworld模块中的指令。[cpp] view plaincopyprint?helloworld中的代码 /* Commands */ static ngx_command_t ngx_http_hello_world_commands[] = { { ngx_string("hello_
2015-11-28 16:50:47 367
转载 nginx 源码学习笔记(三)——nginx精粹-模块
下面开始真正"nginx之旅",屏住呼吸吧!首先找好入手点,对于nginx的入手点就是ngx_module_t结构,他的声明在src/core/ngx_conf_file.h中(我的版本nginx-1.0.13)[cpp] view plaincopyprint?#define NGX_MODULE_V1 0, 0,
2015-11-28 16:49:34 423
转载 nginx 源码学习笔记(二)——nginx精粹-模块
看了一点nginx的源码发现,nginx的模块思想确实吸引了我,也不得不佩服俄罗斯人的想问题方式,要分析nginx源码,首先要搞懂的就是nginx的模块思想以及相关的数据结构。还记得我们上一次写的helloworld模块么?里面涉及最重要的数据就是ngx_module_t指针数组,这个指针数组包含了当前编译版本支持的所有模块,这个指针数组定义实在自动脚本生成的objs/ngx_module
2015-11-28 16:46:33 342
转载 nginx 源码学习笔记(一)——初识nginx helloworld模块
最近看完一本书,而且还是跟我一个学校的人写的关于nginx的内容,个人觉得内容可以更充实点,包括整本书的后半本没有太大的价值,但是总体来说还是不错的哈哈!(是不有点自恋),不费话了,今天记录下我刚刚编写的nginx hello_world模块内容,网上也没有源代码,就完全手敲了,累呀! 1.nginx模块首先nginx和apache最大的不同就是nginx的模块不能够动态添加,需要
2015-11-28 16:44:42 116
转载 Leveldb源码分析--13
8 FilterPolicy&Bloom之28.5 构建FilterBlock8.5.1 FilterBlockBuilder了解了filter机制,现在来看看filter block的构建,这就是类FilterBlockBuilder。它为指定的table构建所有的filter,结果是一个string字符串,并作为一个block存放在table中。
2015-11-26 20:33:41 441 1
转载 Leveldb源码分析--12
8 FilterPolicy&Bloom之18.1 FilterPolicy因名知意,FilterPolicy是用于key过滤的,可以快速的排除不存在的key。前面介绍Table的时候,在Table::InternalGet函数中有过一面之缘。FilterPolicy有3个接口:virtual const char* Name() const = 0; // 返回fil
2015-11-26 20:32:37 501
转载 Leveldb源码分析--11
7 TableCache这章的内容比较简单,篇幅也不长。7.1 TableCache简介TableCache缓存的是Table对象,每个DB一个,它内部使用一个LRUCache缓存所有的table对象,实际上其内容是文件编号{file number, TableAndFile*}。TableAndFile是一个拥有2个变量的结构体:RandomAccessFile*
2015-11-26 20:31:40 494
转载 Leveldb源码分析--10
6 SSTable之46.6 遍历Table6.6.1 遍历接口Table导出了一个返回Iterator的接口,通过Iterator对象,调用者就可以遍历Table的内容,它简单的返回了一个TwoLevelIterator对象。见函数实现:[cpp] view plaincopyIterator* NewItera
2015-11-26 20:29:58 422
转载 Leveldb源码分析--9
6 SSTable之36.5 读取sstable文件6.5.1 类层次Sstable文件的读取逻辑在类Table中,其中涉及到的类还是比较多的,如图6.5-1所示。图6.5-1Table类导出的函数只有3个,先从这三个导出函数开始分析。其中涉及到的类(包括上图中为画出的)都会一一遇到,然后再一一拆解。本节分
2015-11-26 20:28:36 113
转载 Leveldb源码分析--8
6 SSTable之26.4 创建sstable文件了解了sstable文件的存储格式,以及Data Block的组织,下面就可以分析如何创建sstable文件了。相关代码在table_builder.h/.cc以及block_builder.h/.cc(构建Block)中。6.4.1 TableBuilder类构建sstable文件的类是T
2015-11-26 20:27:39 399
转载 Leveldb源码分析--7
6 SSTable之1SSTable是Leveldb的核心之一,是表数据最终在磁盘上的物理存储。也是体量比较大的模块。6.1 SSTable的文件组织作者在文档doc/table_format.txt中描述了表的逻辑结构,如图6.1-1所示。逻辑上可分为两大块,数据存储区Data Block,以及各种Meta信息。1)文件中的k/v对是有序存储的,并且被划分
2015-11-24 19:03:22 507
转载 Leveldb源码分析--6
5 操作Log 2 5.3 读日志日志读取显然比写入要复杂,要检查checksum,检查是否有损坏等等,处理各种错误。5.3.1 类层次先来看看读取涉及到的类图,如图5.3-1。Reader主要用到了两个接口,一个是汇报错误的Reporter,另一个是log文件读取类SequentialFile。> Reporter的接口只有一个
2015-11-24 19:01:39 488
转载 rtsp详解二之wireshark抓包分析
一、概述 RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似。 RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。RTSP本身并不用于传送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。 基本的RTSP操作过程
2015-11-23 14:19:01 14224
转载 rtsp详解一
目录:概述RTSP简介协议特点协议细节典型的rtsp交互过程RTSP消息格式方法定义消息头定义状态码rtsp中常用方法举例SDP协议概述简介SDP协议格式SDP协议举例说明概述RTSP简介RTSP(Real Time Streaming Protocol), 实时流传输协议, 是TCP/IP协议体系中的一个应用层协议, 由
2015-11-23 14:16:48 1607
转载 Leveldb源码分析--5
5 操作Log 1分析完KV在内存中的存储,接下来就是操作日志。所有的写操作都必须先成功的append到操作日志中,然后再更新内存memtable。这样做有两个有点:1可以将随机的写IO变成append,极大的提高写磁盘速度;2防止在节点down机导致内存数据丢失,造成数据丢失,这对系统来说是个灾难。在各种高效的存储系统中,这已经是口水技术了。5.1 格式在
2015-11-23 09:07:23 449
转载 Leveldb源码分析--4
4 Memtable之24.6 Comparator弄清楚了key,接下来就要看看key的使用了,先从Comparator开始分析。首先Comparator是一个抽象类,导出了几个接口。其中Name()和Compare()接口都很明了,另外的两个Find xxx接口都有什么功能呢,直接看程序注释:[cpp] view plaincopy
2015-11-23 09:06:17 585
转载 Leveldb源码分析--3
4 Memtable之1Memtable是leveldb很重要的一块,leveldb的核心之一。我们肯定关注KV数据在Memtable中是如何组织的,秘密在Skip list中。4.1 用途在Leveldb中,所有内存中的KV数据都存储在Memtable中,物理disk则存储在SSTable中。在系统运行过程中,如果Memtable中的数据占用内存到达指定值(O
2015-11-23 09:05:25 493
转载 Leveldb源码分析--2
3 Int Coding轻松一刻,前面约定中讲过Leveldb使用了很多VarInt型编码,典型的如后面将涉及到的各种key。其中的编码、解码函数分为VarInt和FixedInt两种。int32和int64操作都是类似的。3.1 Decode首先是FixedInt编码,直接上代码,很简单明了。void EncodeFixed32(char* buf, ui
2015-11-23 09:04:23 559
转载 Leveldb源码分析--1
【前言:看了一点oceanbase,没有意志力继续坚持下去了,暂时就此中断,基本上算把master看完了,比较重要的update server和merge server代码却没有细看。中间又陆续研究了hadoop的源码,主要是name node和写入pipeline。主要的目的是想看看name node对namespace的管理,以及hadoop在写入操作时,client、data nod
2015-11-23 09:03:06 582
转载 .properties 文件
在我们平时写程序的时候,有些参数是经常改变的,而这种改变不是我们预知的。比如说我们开发了一个操作数据库的模块,在开发的时候我们连接本地的数据库那么IP ,数据库名称,表名称,数据库主机等信息是我们本地的,要使得这个操作数据的模块具有通用性,那么以上信息就不能写死在程序里。通常我们的做法是用配置文件来解决。各种语言都有自己所支持的配置文件类型。比如Python ,他支持.ini 文件。因为他
2015-11-13 11:02:49 413
转载 java import、package作用与用法
有些人写了一阵子 Java,可是对於 Java 的 package 跟 import 还是不 太了解很多人以為原始码 .java 档案中的 import 会让编译器把所 import 的程式通通写到编译好的 .class 档案中,或是认為 import 跟 C/C++ 的 #include 相似,实际上,这是错误的观念。让我们先了解一下,Java 的 package 到底有何用
2015-11-13 10:56:43 440
转载 最详细的Log4j使用教程
一、入门实例1.新建一个JAva工程,导入包log4j-1.2.17.jar,整个工程最终目录如下2、src同级创建并设置log4j.properties ### 设置###log4j.rootLogger = debug,stdout,D,E### 输出信息到控制抬 ###log4j.appender.stdout = org.apache.log4j.Con
2015-11-13 10:42:55 377
转载 Tomcat的bin目录下的startup.bat和Tomcat7.exe的区别
情况:Tomcat解压后,启动bin目录的startup.bat正常,但是启动tomcat7.exe却启动不了,为什么?一、tomcat7.exe与startup.bat的区别:1、这两个都可以启动tomcat,但tomcat7.exe必须安装了服务才能启动,而startup.bat不需要2、另外一个区别是它们启动所使用的JAVA环境配置是分开的tomcat7.
2015-11-12 17:01:49 1959
转载 Tomcat中JVM内存溢出及合理配置
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行详细介绍。一、Java JVM内存介绍JVM管理两种类型的内存,堆和非堆。按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是
2015-11-12 16:48:56 395
转载 jdk环境变量配置
jdk环境变量配置进行java开发,首先要安装jdk,安装了jdk后还要进行环境变量配置:1、下载jdk(http://java.sun.com/javase/downloads/index.jsp),我下载的版本是:jdk-6u14-windows-i586.exe2、安装jdk-6u14-windows-i586.exe3、配置环境变量:右击“我的电脑”-->"高级"-->
2015-11-12 09:15:58 564
转载 跳表
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。 用跳表吧,跳表是一种随机化的数据结构,目前
2015-11-11 23:18:55 434
转载 模板类中的成员函数定义返回值为类中的typedef类型时候注意
如果模板类中的成员要访问类中的typedef类型必须加上关键字typename来指明它是一个类型。 如一下代码中的那个成员函数size。 [cpp] view plaincopy#include #include templatetypename Type> class List {
2015-11-09 22:44:41 2115
转载 Spring Hello World 实例
运行环境 1、myeclpise10.5 2、JDK63、 junit-4.11.jar 、hamcrest-core-1.3.jar 、 hamcrest-library-1.3.jar4、spring依赖的com.springsource.org.apache.log4j-1.2.15.jar5、spring3.056、准备需要的jar
2015-11-06 10:41:24 337
转载 C++中复制构造函数与重载赋值操作符总结
前言这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容:复制构造函数和重载赋值操作符的定义;复制构造函数和重载赋值操作符的调用时机;复制构造函数和重载赋值操作符的实现要点;复制构造函数的一些细节。复制构造函数和重载赋值操作符的定义我们都知道,在C++中建立一个类,这个类中肯定会包括构造函数、析构函数、复制构造函数和重载赋值操作;即使在你没有明确定
2015-11-05 16:49:40 591
转载 C++设计模式——观察者模式
前言之前做了一个性能测试的项目,就是需要对现在的产品进行性能测试,获得测试数据,然后书写测试报告,并提出合理化的改善意见。项目很简单,我们获得了一系列性能测试数据,对于数据,我们需要在Excel中制作测试数据的折线图、饼状图和柱状图,以直观的表现出性能的变化。在实际操作时,我发现,如果我修改了一个数据,折线图、饼状图和柱状图就都发生了变换。这个是如何做到的?这就要说到今天总结的观察者模式了
2015-11-05 15:39:33 322
转载 C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。 堆,就是那些由 new 分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个 new 就要对应一个 delete。如果程序员没
2015-11-05 10:32:03 359
转载 Struts2与Servlet的关系
在struts2.0中,可以通过ServletActionContext.getRequest()获取request对象。 在action的方法中return一个字符串,该字符串对应struts.xml中的result标签的name相同,result标签中包含的就是跳转页面, 其原理,我的理解是这样的: 一.客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输
2015-11-04 14:57:22 382
转载 使用do{ } while(0);有什么好处?
【gq414047080】:_Api(){ do { //do something }while(0);}这样的写法有什么好处啊?将楼主的问题扩展一下,do{} while(0);的用处都有什么?不仅限于楼主所贴代码的使用形式。这里整理一些(我觉得)比较有意义的回帖:【happynesslele】:有时
2015-11-03 11:13:59 536
微服务设计(中文完整版)
2018-05-30
重构:改善既有代码的设计
2018-05-24
effective c++(第3版)
2018-05-24
第一本Docker书带书签目录(完整版)
2018-05-22
[精通正则表达式(第三版)].(美)佛瑞德.扫描版
2018-05-22
The_AWK_Programming_Language中文
2018-05-22
sed与awk(第二版)
2018-05-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人