> 文档中心 > 2022年6月7日记:Linux服务器开发,King老师,网络io与select,poll。epol

2022年6月7日记:Linux服务器开发,King老师,网络io与select,poll。epol

推荐一个 零声学院 免费公开课程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习]
后台服务器:https://course.0voice.com/v1/course/intro?courseId=5&agentId=0


2022年6月7日记:Linux服务器开发,King老师,网络io与select,poll。epol
listenfd就相当于迎宾小姐姐,而clientfd就相当于服务员小姐姐,多个客户端就需要多个服务员小姐姐。
2022年6月7日记:Linux服务器开发,King老师,网络io与select,poll。epol

三次握手发生在哪个api?

不发生任何api里面,它是协议栈本身完成的,出于listen之后accept之前。

第三个版本,利用多线程进行接收数据,一个客户端一个线程

void *client_routine(void *arg){int connfd=*(int *)arg;char buff[MAXLINE];while(1){if(n>0)buf[n]='\n';pritnf("recv msg from client:%s\n",buf);send(connfd,buff,n,0);else if(n==0){close(connfd);break;}}}

优点:逻辑简单
缺点:不适合大量的客户端请求

我们需要一个组件,准确的知道哪个客户端发来了数据。select就是选择有事件来的fd,

select(max_fd+1,&rset,NULL,NULL,NULL);

select本身自带阻塞功能,第五个参数为NULL,如果监控可读,就一直等着。
listenfd是一个依次增加的,012是确定的,3就是listenfd,回收之后就从最小的开始算起。
一请求一线程做到上千已经很了不起,而如果选用多个线程可打c10k。
epoll_create(1);这个1以前是个固定大小,现在是链表,这个参数没有用但是要大于0。
epoll_wait表示快递员多长时间取一次快递的时间。
epoll_event就是快递的袋子,这个我们需要确定大小。大小无所谓,多跑几趟的问题。
感受不到epoll的优点。

饲料网