- 博客(38)
- 收藏
- 关注
转载 对于redis底层框架的理解(一)
近期学习了redis底层框架,好多东西之前都没听说过,算是大开眼界了。 先梳理下redis正常的通讯流程吧 首先服务器启动都有主函数main,这个main函数就在redis.c里 首先是initserverconfig(),在这里初始化了redisserver基本的配置信息,...
2016-08-13 10:50:00
127
转载 redis 字符串的管理的一点理解
redis字符串可以实现通过地址偏移找到所在结构体的首地址,struct sdshdr *sh = (void *)(s - (sizeof(struct sdshdr))) 也就是通过buf地址可以找到sdshdr的地址,这个我一直不理解,写了代码测试下 地址一次间隔4,结构体总...
2016-08-13 10:50:00
92
转载 IO多路复用之epoll(二)
前一篇介绍了epoll的LT模式,LT模式注意epollout事件在数据全部写成功后需要取消关注, 或者更改为EPOLLIN。 而这次epoll的ET模式,要注意的是在读和写的过程中要在循环中写完或者读完所有数据, 确保不要丢掉一些数据。 因为epoll ET模式只在两种边缘更改的时候...
2016-08-13 10:49:00
69
转载 IO多路复用之epoll(一)讲解
网络通信中socket有自己的内核发送缓冲区和内核接受缓冲区,好比是一个水池, 当用户发送数据的时候会从用户缓冲区拷贝到socket的内核发送缓冲区,然后从 socket发送缓冲区发出去, 当用户要读取数据时,就是从socket内核读缓冲区读 到用户缓冲区。所以TCP中recv, ...
2016-08-13 10:49:00
101
转载 基于epoll封装的事件回调miniserver
epoll技术前两节已经阐述过了,目前主要做一下封装,很多epoll的服务器都是采用事件回调方式处理, 其实并没有什么复杂的,我慢慢给大家阐述下原理。 在networking.h和networking.cpp里,这两个文件主要实现了一些文件读写功能的回调函数 。 acceptCa...
2016-08-13 10:48:00
79
转载 简单循环服务器
客户端部分: 比较简单 创建socket 然后connect服务器,进行通讯 发送数据,并且接收数据,然后关闭 服务器部分: 服务器要做的是创建socket,初始化地址信息,并且绑定socket,然后进行监听 然互就是在循环里处理客户端连接上来的请求,并且接...
2016-08-13 10:47:00
84
转载 弱点针对训练(函数指针)
想着把每一个基础的知识点搞清,趁着早晨凉快就先写一些总结 函数指针,基本结构是 函数返回类型(* 函数指针名字)(函数参数1,函数参数2,...); 这种指针用于指向一个函数的地址,可以通过函数指针回调同类型的不同函数,实现类似于事件回调机制的功能。 先写一个简单的测试程序 ...
2016-08-13 10:47:00
107
转载 简单的并发服务器(多个线程各自accept)
基于之前讲述的简单循环服务器,做一个多个线程各自accept的服务器demo 由于多个线程各自accept,容易造成数据错误,需要在accept前后枷锁 先看下客户端 客户端创建socket,初始化服务器地址信息,然后进行连接 连接成功后发送信息给服务器,并且接受服务器回传的...
2016-08-13 10:46:00
327
转载 对于redis框架的理解(二)
之前梳理过redis main函数主体流程 大体是initServerConfig() ->loadServerConfig() ->daemonize() ->initServer() ->aeSetBeforeSleepProc() ->aeM...
2016-08-11 10:35:00
72
转载 对于redis框架的理解(四)
上一篇讲述了eventloop的结构和创建,添加文件事件删除文件事件,派发等等。 而eventloop主要就是调用不同网络模型完成事件监听和派发的。 这一篇主要讲述epoll网络模型,redis是如何封装和调用的 下面是epoll_event的结构 /* epoll_even...
2016-08-11 10:34:00
53
转载 对于redis框架的理解(三)
上一篇讲完了initServer的大体流程,其中aeCreateEventLoop(),这个函数 没有详细说明,我们在这一篇里讲述Ae.h和Ae.c, 这里面的api阐述了如何创建 eventLoop和添加文件读写事件等等。 ae.h中的解释 //文件读写事件回调函数typedef ...
2016-08-11 10:34:00
84
转载 libiop网络库数据结构和基础知识
最近朋友推荐,学习了libiop这个网络库,作者封装的很全面,代码很简洁 适合初学者学习基于事件驱动的网络io 先看看iop_def.h, 这里面定义了常用的数据结构 tag_iop_base_t 主要用于管理所有事件,每个事件是一个iop_t, maxio表示最大的文件描述符...
2016-08-11 10:33:00
100
转载 makefile学习笔记
之前都是手动编译的,最近也学了下makefile相关的知识, 文件结构是这样的在server文件夹里有eventloop.h, eventloop.cpp, networking.h, networking.cpp, api_epoll.h, api_epoll.cpp,以及文件夹mai...
2016-08-11 10:32:00
60
转载 libiop通讯流程和api讲解
上一篇讲到了libiop基本结构,这次根据libiop提供的test跟踪下消息和运行流程 void echo_server_test(){ int keepalive_timeout = 60; iop_base_t *base = iop_base_new(10240);...
2016-08-11 10:32:00
292
转载 stringstream 使用方法
C++ 有stringstream这个工具可以方便的进行数据类型的转换 使用时包含 #include <sstream.h> using namespace std; 当需要将一个整形的数转换为字符串 stringstream mystream;int a = ...
2016-08-11 10:31:00
69
转载 对于redis底层框架的理解(五)
之前总结了redis的通讯流程,基本框架,epoll的封装等等,这次介绍下 redis对于select模型的封装 //select 模型typedef struct aeApiState { //读文件描述符集合,写文件描述符集合 fd_set rfds, wfds; ...
2016-08-11 10:30:00
52
转载 select网络模型知识总结
select模型支持IO多路复用,select函数如下 int select ( IN int nfds, //windows下无意义,linux有意义 IN OUT fd_set* readfds, //检查可读性 IN ...
2016-08-11 10:30:00
96
转载 epoll的一些细节和注意事项
epoll_event结构 struct epoll_event{ uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */} __attribute__ ((__pac...
2016-08-11 10:29:00
137
转载 Linux环境编译动态库和静态库总结
对Linux环境动态库和静态库的一些基础知识做一些总结, 首先总结静态库的编译步骤。 1 先基于.cpp或者.c文件生成对应的.o文件 2将几个.o文件 使用ar -cr命令 生成libname.a文件 libname.a 为静态库, name 为静态库的名字, 可以根据模块功能命名...
2016-08-10 11:39:00
130
转载 libevent学习笔记(参考libevent深度剖析)
最近自学libevent事件驱动库,参考的资料为libevent2.2版本以及张亮提供的《Libevent源码深度剖析》, 参考资料:http://blog.csdn.net/sparkliang/article/details/4957667 libevent好处之类的就不赘述了,li...
2016-08-10 11:38:00
110
转载 pthread_cond_wait学习笔记
近期学习了线程等待和激活的相关知识。 先介绍几个api: pthread_cond_t表示多线程的条件变量,用于控制线程等待和就绪的条件。 一:条件变量的初始化: 条件变量和互斥锁一样,都有静态动态两种创建方式, 静态方式使用PTHREAD_COND_INITIALIZER常量初始化...
2016-08-10 11:37:00
74
转载 windows环境libevent搭建和demo分析
libevent框架之前有做过分析,这次是谈谈如何将libevent搭建在vs工作环境下, 并且编写一个demo进行测试。测试过程中会再一次带大家分析消息是怎么传递 的。 我的libevent版本libevent-2.0.22-stable,用对应的vs命令工具进入该目录 我的是V...
2016-08-10 11:37:00
84
转载 libevent文档学习(一)多线程接口和使用
参考libevent官方提供的文档: http://www.wangafu.net/~nickm/libevent-book/Ref1_libsetup.html 这一篇主要翻译libevent多线程的使用接口和文档。 As you probably know if you’re writ...
2016-08-10 11:36:00
166
转载 libevent学习文档(二)eventbase相关接口和参数
Setting up a default event_base The event_base_new() function allocates and returns a new event base with the default settings. It examines the e...
2016-08-10 11:35:00
58
转载 libevent学习文档(三)working with event
Events have similar lifecycles. Once you call a Libevent function to set up an event and associate it with an event base, it becomesinitialized. A...
2016-08-10 11:34:00
90
转载 Libevent学习笔记(五) 根据例子学习bufferevent
libevent中提供了一个Hello-world.c 的例子,从这个例子可以学习libevent是如何使用bufferevent的。 这个例子在Sample中 这个例子之前讲解过,这次主要看下bufferevent的使用。 第一步找到main函数 main函数 int mai...
2016-08-10 11:33:00
75
转载 Libevent学习笔记(四) bufferevent 的 concepts and basics
Bufferevents and evbuffers Every bufferevent has an input buffer and an output buffer. These are of type "struct evbuffer". When you have data to...
2016-08-10 11:33:00
97
转载 poppo大根堆的原理与实现。
大根堆的定义:1 大根堆是一个大根树 2 大根堆是一个完全二叉树 所以大根堆用数组表示是连续的,不会出现空白字段。 对于大根堆的插入 对于大根堆的插入,可以在排序前确定大根堆的形状,可以确定元素5从位置6插入,那么比较元素5和位置3的元素2, 元素5比元素2大,将2下移。接着...
2016-08-10 11:32:00
332
转载 C++模板类注意事项
最近使用C++模板,虽然工作几年了,但是模板用的很少,确切的说自己实现的机会很小。 昨天写了一个代码maxheap.h 中实现了类模板的声明,我将实现写在maxheap.cpp中, 当在main.cpp中引用maxheap中的接口时,提示链接错误。网上提供了几个解决方案, 第一种方式是将...
2016-08-09 18:01:00
207
转载 C++ 局部静态变量,全局变量,全局静态变量,局部变量的区别和联系
C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。 从作用域看: 全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关...
2016-08-09 18:00:00
93
转载 TCP粘包处理
TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket, 因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小...
2016-08-09 17:59:00
97
转载 C++单例模式设计与实现
C++单例模式主要用途就是整个程序中只实例化一个对象,之后获取到的都是该对象本身进行处理问题。 单例模式一般都是在函数中采用局部静态变量完成的,因为局部的静态变量生命周期是随着程序的生命周期 一起结束,所以不用担心会失效。另外局部的静态变量作用域仅限于该函数内部,别的函数不会直接使用。 ...
2016-08-09 17:57:00
57
转载 网络编程的一些错误总结
最近自己在写一套服务器框架,期间遇到很多问题, 对于Linux或者windows出错情况下可以通过错误码获取错误信息。 为了测试服务器性能,我在客户端开了2000个线程,这样每个线程 都创建socket和服务器通信,连接15个线程,再后来的客户端线程 connect过程中会失败,我另起...
2016-08-09 17:55:00
90
转载 Google protocol buffer的配置和使用(Linux&&Windows)
最近自己的服务器做到序列化这一步了,在网上看了下,序列化的工具有boost 和google的protocol buffer, protocol buffer的效率和使用程度更高效一些,就自己琢磨下把他加到自己的服务器里。 所以这里我先弄一个小的demo去测试如何使用和配置protocol ...
2016-08-09 17:54:00
74
转载 C++ 注意事项
一. C++类的引用成员,类的常量成员,类的static成员的初始化方式 类的引用成员和常量成员初始化放在初始化列表里,因为初始化只有一次,需要在构造函数之前进行初始化, 写在类的构造函数会出错。 类的static变量要放在类声明的外边定义,因为static变量属于整个类,而不是类对象,...
2016-08-09 17:53:00
62
转载 windows多线程接口介绍和使用
一windows多线程接口: 1 创建线程 CreateThread 与_beginthreadex都可以实现创建线程,两个函数的参数 相同, HANDLEWINAPICreateThread( LPSECURITY_ATTRIBUTESlpThreadAttributes,...
2016-08-09 17:52:00
146
转载 Windows互斥锁demo和分析
一:windows创建锁接口 创建互斥锁的方法是调用函数CreateMutex HANDLE CreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttributes, // 指向安全属性的指针BOOLbInitialOwner, // 初始化互斥对象的所有...
2016-08-09 17:51:00
213
转载 Linux环境崩溃生成core文件以及调试
Windows环境崩溃问题可根据vs调试工具查看,Linux同样可以查看调用堆栈的信息,只是 需要更改Linux设置,使程序崩溃时候产生core文件。然后gdb调试即可。 1产生core文件方法 产生coredump的条件,首先需要确认当前会话的ulimit –c,若为0,则不会产生对应...
2016-08-09 17:49:00
73
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人