当前位置:   article > 正文

147 Linux 网络编程3 ,高并发服务器 --多路I/O转接服务器 - select

147 Linux 网络编程3 ,高并发服务器 --多路I/O转接服务器 - select

从前面的知识学习了如何通过socket ,多进程,多线程创建一个高并发服务器,但是在实际工作中,我们并不会用到前面的方法 去弄一个高并发服务器,有更加好用的方法,就是多路I/O转接器

零 多路I/O转接服务器

多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。

主要使用的方法有三种 select , poll , epoll

其中select 可以跨平台

poll 和 epoll不能跨平台,只能在linux上使用。

重点是epoll

次重点是 select

poll知道就行了,再学习后我们会知道原因。

本章主要学习 select。

一 select 

  1. select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开的文件描述符个数并不能改变select监听文件个数
  2. 解决1024以下客户端时使用select是很合适的,但如果链接客户端过多,select采用的是轮询模型,会大大降低服务器响应效率,不应在select上投入更多精力。

select 函数借助内核监听两件事,:客户端连接,数据通信事件。

核心函数: select函数 ,FD_CLR,FD_ISSET,FD_SET,FD_ZERO

int select(int nfds, fd_set *readfds, fd_set *writefds,
            fd_set *exceptfds, struct timeval *timeout);

void FD_CLR(int fd, fd_set *set); //把文件描述符集合里fd位清0

int FD_ISSET(int fd, fd_set *set); //测试文件描述符集合里fd是否置1

void FD_SET(int fd, fd_set *set); //把文件描述符集合里fd位置1

void FD_ZERO(fd_set *set); //把文件描述符集合里所有位清0

  1. #include <sys/select.h>
  2. /* According to earlier standards */
  3. #include <sys/time.h>
  4. #include <sys/types.h>
  5. #include <unistd.h>
  6. int select(int nfds, fd_set *readfds, fd_set *writefds,
  7. fd_set *exceptfds, struct timeval *timeout);
  8. nfds: 监控的文件描述符集里最大文件描述符加1,因为此参数会告诉内核检测前多少个文件描述符的状态
  9. readfds: 监控有读数据到达文件描述符集合,传入传出参数
  10. writefds: 监控写数据到达文件描述符集合,传入传出参数
  11. exceptfds: 监控异常发生达文件描述符集合,如带外数据到达异常,传入传出参数
  12. timeout: 定时阻塞监控时间,3种情况
  13. 1.NULL,永远等下去
  14. 2.设置timeval,等待固定时间
  15. 3.设置timeval里时间均为0,检查描述字后立即返回,轮询
  16. struct timeval {
  17. long tv_sec; /* seconds */
  18. long tv_usec; /* microseconds */
  19. };
  20. void FD_CLR(int fd, fd_set *set); //把文件描述符集合里fd位清0
  21. int FD_ISSET(int fd, fd_set *set); //测试文件描述符集合里fd是否置1
  22. void FD_SET(int fd, fd_set *set); //把文件描述符集合里fd位置1
  23. void FD_ZERO(fd_set *set); //把文件描述符集合里所有位清0

server 端代码实现

client 端代码实现

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/280438
推荐阅读
相关标签
  

闽ICP备14008679号