随笔分类 -  网络编程

摘要:select模型支持IO多路复用,select函数如下 逐个解释每个参数意义: nfds:一个整型变量,表示比最大文件描述符+1 readfds: 这个集合监测读事件的描述符,将要监听 读事件的文件描述符放入readfds中,通过调用select, readfds中将没有就绪的读事件文件描述符清除, 阅读全文
posted @ 2016-05-18 17:43 恋恋风辰 阅读(2503) 评论(5) 推荐(0) 编辑
摘要:上一篇讲到了libiop基本结构,这次根据libiop提供的test跟踪下消息和运行流程 echo_server_test 函数内部添加了一个tcpserver,将函数一层一层展开 展开iop_add_tcp_server 解读iop_add_tcp_server 函数参数iop_base_t 是i 阅读全文
posted @ 2016-05-12 14:17 恋恋风辰 阅读(1887) 评论(0) 推荐(0) 编辑
摘要:最近朋友推荐,学习了libiop这个网络库,作者封装的很全面,代码很简洁 适合初学者学习基于事件驱动的网络io 先看看iop_def.h, 这里面定义了常用的数据结构 tag_iop_base_t 主要用于管理所有事件,每个事件是一个iop_t, maxio表示最大的文件描述符, free_list 阅读全文
posted @ 2016-05-12 11:42 恋恋风辰 阅读(896) 评论(0) 推荐(0) 编辑
摘要:上一篇讲述了eventloop的结构和创建,添加文件事件删除文件事件,派发等等。 而eventloop主要就是调用不同网络模型完成事件监听和派发的。 这一篇主要讲述epoll网络模型,redis是如何封装和调用的 下面是epoll_event的结构 Ae_epoll.c文件中回传的数据结构 Ae_e 阅读全文
posted @ 2016-05-09 12:40 恋恋风辰 阅读(432) 评论(0) 推荐(0) 编辑
摘要:上一篇讲完了initServer的大体流程,其中aeCreateEventLoop(),这个函数 没有详细说明,我们在这一篇里讲述Ae.h和Ae.c, 这里面的api阐述了如何创建 eventLoop和添加文件读写事件等等。 ae.h中的解释 ae.cpp中,一个函数一个函数解析 aeCreateE 阅读全文
posted @ 2016-05-09 11:23 恋恋风辰 阅读(910) 评论(0) 推荐(0) 编辑
摘要:之前梳理过redis main函数主体流程 大体是 initServerConfig() -> loadServerConfig() -> daemonize() -> initServer() -> aeSetBeforeSleepProc() ->aeMain() -> aeDeleteEven 阅读全文
posted @ 2016-05-06 12:17 恋恋风辰 阅读(2018) 评论(0) 推荐(0) 编辑
摘要:基于之前讲述的简单循环服务器,做一个多个线程各自accept的服务器demo 由于多个线程各自accept,容易造成数据错误,需要在accept前后枷锁 先看下客户端 客户端创建socket,初始化服务器地址信息,然后进行连接 连接成功后发送信息给服务器,并且接受服务器回传的信息 服务器部分: 服务 阅读全文
posted @ 2016-05-05 11:10 恋恋风辰 阅读(4772) 评论(0) 推荐(0) 编辑
摘要:客户端部分: 比较简单 创建socket 然后connect服务器,进行通讯 发送数据,并且接收数据,然后关闭 服务器部分: 服务器要做的是创建socket,初始化地址信息,并且绑定socket,然后进行监听 然互就是在循环里处理客户端连接上来的请求,并且接受信息,回发信息 循环服务器比较简单,而且 阅读全文
posted @ 2016-05-05 10:37 恋恋风辰 阅读(882) 评论(0) 推荐(0) 编辑
摘要:epoll技术前两节已经阐述过了,目前主要做一下封装,很多epoll的服务器都是采用事件回调方式处理, 其实并没有什么复杂的,我慢慢给大家阐述下原理。 在networking.h和networking.cpp里,这两个文件主要实现了一些文件读写功能的回调函数 。 acceptCallBack 负责新 阅读全文
posted @ 2016-04-25 19:45 恋恋风辰 阅读(2822) 评论(0) 推荐(0) 编辑
摘要:前一篇介绍了epoll的LT模式,LT模式注意epollout事件在数据全部写成功后需要取消关注, 或者更改为EPOLLIN。 而这次epoll的ET模式,要注意的是在读和写的过程中要在循环中写完或者读完所有数据, 确保不要丢掉一些数据。 因为epoll ET模式只在两种边缘更改的时候触发,对于读事 阅读全文
posted @ 2016-04-10 01:43 恋恋风辰 阅读(406) 评论(0) 推荐(0) 编辑
摘要:网络通信中socket有自己的内核发送缓冲区和内核接受缓冲区,好比是一个水池, 当用户发送数据的时候会从用户缓冲区拷贝到socket的内核发送缓冲区,然后从 socket发送缓冲区发出去, 当用户要读取数据时,就是从socket内核读缓冲区读 到用户缓冲区。所以TCP中recv, send, rea 阅读全文
posted @ 2016-04-08 12:15 恋恋风辰 阅读(1084) 评论(0) 推荐(0) 编辑
摘要:近期学习了redis底层框架,好多东西之前都没听说过,算是大开眼界了。 先梳理下redis正常的通讯流程吧 首先服务器启动都有主函数main,这个main函数就在redis.c里 首先是initserverconfig(),在这里初始化了redisserver基本的配置信息, 接着调用loadSer 阅读全文
posted @ 2016-04-06 18:47 恋恋风辰 阅读(1222) 评论(0) 推荐(0) 编辑