高并发服务器简介
如何支持多个客户端,支持多并发的服务器?
由于
accept
和read
函数都会阻塞,如当read
的时候,不能调用accept
接受新的连接,当accept
阻塞等待的时候不能read
读数据。
- 第一种方案:使用多进程,可以让父进程接受新连接,让子进程处理与客户端通信
- 思路:让父进程
accept
接受新连接,然后fork
子进程,让子进程处理通信(接收和发送数据),子进程处理完成后退出,父进程使用SIGCHLD
信号回收子进程- 第二种方案:使用多线程,让主线程接受新连接,让子线程处理与客户端通信;使用多线程要将线程设置为分离属性,让线程在退出之后自己回收资源
思考:如何不使用多进程或者多线程完成多个客户端的连接请求?
可以将
accept
和read
函数设置为非阻塞,调用fcntl
函数可以将文件描述符设置为非阻塞,让后再while循环中忙轮询