摘要:
epoll技术前两节已经阐述过了,目前主要做一下封装,很多epoll的服务器都是采用事件回调方式处理, 其实并没有什么复杂的,我慢慢给大家阐述下原理。 在networking.h和networking.cpp里,这两个文件主要实现了一些文件读写功能的回调函数 。 acceptCallBack 负责新 阅读全文
摘要:
前一篇介绍了epoll的LT模式,LT模式注意epollout事件在数据全部写成功后需要取消关注, 或者更改为EPOLLIN。 而这次epoll的ET模式,要注意的是在读和写的过程中要在循环中写完或者读完所有数据, 确保不要丢掉一些数据。 因为epoll ET模式只在两种边缘更改的时候触发,对于读事 阅读全文
摘要:
网络通信中socket有自己的内核发送缓冲区和内核接受缓冲区,好比是一个水池, 当用户发送数据的时候会从用户缓冲区拷贝到socket的内核发送缓冲区,然后从 socket发送缓冲区发出去, 当用户要读取数据时,就是从socket内核读缓冲区读 到用户缓冲区。所以TCP中recv, send, rea 阅读全文
摘要:
近期学习了redis底层框架,好多东西之前都没听说过,算是大开眼界了。 先梳理下redis正常的通讯流程吧 首先服务器启动都有主函数main,这个main函数就在redis.c里 首先是initserverconfig(),在这里初始化了redisserver基本的配置信息, 接着调用loadSer 阅读全文
摘要:
redis字符串可以实现通过地址偏移找到所在结构体的首地址,struct sdshdr *sh = (void *)(s - (sizeof(struct sdshdr))) 也就是通过buf地址可以找到sdshdr的地址,这个我一直不理解,写了代码测试下 地址一次间隔4,结构体总大小为8,最后一个 阅读全文