我是个redis服务,我马上就要启动了
因为我的主人正在控制台输入:/redis-server宏观上看下我的流程
突然,主人按下了回车键,不得了了。
shell程序把我的程序加载到了内存,开始执行我的main方法,一切就从这里开始了。int main(int argc, char **argv) {initServer();aeCreateFileEvent(fd, acceptHandler, );aeMain();}
不要觉得我这里很复杂,其实主要就三大步。
第一步,我通过 listenToPort() 方法创建了一个TCP连接。
我的这个方法真是见名知意,而且如果展开看就更会发现没什么神秘的,就是 socketbindlisten 标准三步走,建立了一个TCP监听,返回了一个文件描述符fd。
第二步,我通过 aeCreateFileEvent() 方法,将上面那个创建了TCP连接返回的文件描述符fd,加入到一个叫 aeFileEvent 的链表中。
同时将这个文件描述符绑定一个函数 acceptHandler,这样当有客户端连接进来时,便会执行这个函数。
第三步,我通过 aeMain() 方法,将上面的aeFileEvent链表中的文件描述符,统统作为select的入参,这是 IO多路复用模式,如果不太了解的同学请阅读,《你管这破玩意叫IO多路复用?》。