最近在看redis源码,现在正在研究网络代码。
Redis 使用非阻塞模式和 epoll(或类似的东西)进行网络数据读/写。当读取数据事件到达时,会调用“readQueryFromClient”函数,并在该函数中将请求数据读入缓冲区。
在“readQueryFromClient”函数中,如果确实有数据到达,则通过一个“read”函数将数据读入缓冲区,然后处理请求。
nread = read(fd, c->querybuf+qblen, readlen); // **one read function**
//... some other codes to check read function retuen value
processInputBuffer(c);// **request will be handled in this function**
我的问题是:redis 如何确保所有请求数据都可以通过一个“读取”函数调用读入缓冲区,也许所有数据都将通过更多“读取”函数调用获取?