05 2016 档案
摘要:最近自学libevent事件驱动库,参考的资料为libevent2.2版本以及张亮提供的《Libevent源码深度剖析》, 参考资料: http://blog.csdn.net/sparkliang/article/details/4957667 libevent好处之类的就不赘述了,libeven
阅读全文
摘要:对Linux环境动态库和静态库的一些基础知识做一些总结, 首先总结静态库的编译步骤。 1 先基于.cpp或者.c文件生成对应的.o文件 2将几个.o文件 使用ar -cr命令 生成libname.a文件 libname.a 为静态库, name 为静态库的名字, 可以根据模块功能命名。 举个例子 在
阅读全文
摘要:epoll_event结构 epoll_data是一个联合体,有的网络库使用了fd字段,比如redis, 有的使用了u32,比如libiop,之前一直纠结epoll的工作原理 个人认为在epoll_wait之后内核会自动移动epoll_event队列的内容。 因为epoll_wait返回就绪的文件描
阅读全文
摘要:之前总结了redis的通讯流程,基本框架,epoll的封装等等,这次介绍下 redis对于select模型的封装 _rfds和_wfds是读写结合的副本,因为select调用后会将读写集合中未就绪的文件描述符 清除,所以每次用_rfds和_wfds传入,就不用担心原读写集合描述符被清除。 封装的基于
阅读全文
摘要:select模型支持IO多路复用,select函数如下 逐个解释每个参数意义: nfds:一个整型变量,表示比最大文件描述符+1 readfds: 这个集合监测读事件的描述符,将要监听 读事件的文件描述符放入readfds中,通过调用select, readfds中将没有就绪的读事件文件描述符清除,
阅读全文
摘要:C++ 有stringstream这个工具可以方便的进行数据类型的转换 使用时包含 #include <sstream.h> using namespace std; 当需要将一个整形的数转换为字符串 如果需要将一个字符串转化为整形数 再次使用mystream需要清除之前的状态位 调用 mystre
阅读全文
摘要:之前都是手动编译的,最近也学了下makefile相关的知识, 文件结构是这样的在server文件夹里有eventloop.h, eventloop.cpp, networking.h, networking.cpp, api_epoll.h, api_epoll.cpp,以及文件夹main, 在ma
阅读全文
摘要:上一篇讲到了libiop基本结构,这次根据libiop提供的test跟踪下消息和运行流程 echo_server_test 函数内部添加了一个tcpserver,将函数一层一层展开 展开iop_add_tcp_server 解读iop_add_tcp_server 函数参数iop_base_t 是i
阅读全文
摘要:最近朋友推荐,学习了libiop这个网络库,作者封装的很全面,代码很简洁 适合初学者学习基于事件驱动的网络io 先看看iop_def.h, 这里面定义了常用的数据结构 tag_iop_base_t 主要用于管理所有事件,每个事件是一个iop_t, maxio表示最大的文件描述符, free_list
阅读全文
摘要:上一篇讲述了eventloop的结构和创建,添加文件事件删除文件事件,派发等等。 而eventloop主要就是调用不同网络模型完成事件监听和派发的。 这一篇主要讲述epoll网络模型,redis是如何封装和调用的 下面是epoll_event的结构 Ae_epoll.c文件中回传的数据结构 Ae_e
阅读全文
摘要:上一篇讲完了initServer的大体流程,其中aeCreateEventLoop(),这个函数 没有详细说明,我们在这一篇里讲述Ae.h和Ae.c, 这里面的api阐述了如何创建 eventLoop和添加文件读写事件等等。 ae.h中的解释 ae.cpp中,一个函数一个函数解析 aeCreateE
阅读全文
摘要:之前梳理过redis main函数主体流程 大体是 initServerConfig() -> loadServerConfig() -> daemonize() -> initServer() -> aeSetBeforeSleepProc() ->aeMain() -> aeDeleteEven
阅读全文
摘要:基于之前讲述的简单循环服务器,做一个多个线程各自accept的服务器demo 由于多个线程各自accept,容易造成数据错误,需要在accept前后枷锁 先看下客户端 客户端创建socket,初始化服务器地址信息,然后进行连接 连接成功后发送信息给服务器,并且接受服务器回传的信息 服务器部分: 服务
阅读全文
摘要:客户端部分: 比较简单 创建socket 然后connect服务器,进行通讯 发送数据,并且接收数据,然后关闭 服务器部分: 服务器要做的是创建socket,初始化地址信息,并且绑定socket,然后进行监听 然互就是在循环里处理客户端连接上来的请求,并且接受信息,回发信息 循环服务器比较简单,而且
阅读全文
摘要:想着把每一个基础的知识点搞清,趁着早晨凉快就先写一些总结 函数指针,基本结构是 函数返回类型(* 函数指针名字)(函数参数1,函数参数2,...); 这种指针用于指向一个函数的地址,可以通过函数指针回调同类型的不同函数,实现类似于事件回调机制的功能。 先写一个简单的测试程序 编译后看看有什么结果 p
阅读全文