Skip to content

高并发服务器简介

如何支持多个客户端,支持多并发的服务器?

由于acceptread函数都会阻塞,如当read的时候,不能调用accept接受新的连接,当accept阻塞等待的时候不能read读数据。

  • 第一种方案:使用多进程,可以让父进程接受新连接,让子进程处理与客户端通信
    • 思路:让父进程accept接受新连接,然后fork子进程,让子进程处理通信(接收和发送数据),子进程处理完成后退出,父进程使用SIGCHLD信号回收子进程
  • 第二种方案:使用多线程,让主线程接受新连接,让子线程处理与客户端通信;使用多线程要将线程设置为分离属性,让线程在退出之后自己回收资源

思考:如何不使用多进程或者多线程完成多个客户端的连接请求?

可以将acceptread函数设置为非阻塞,调用fcntl函数可以将文件描述符设置为非阻塞,让后再while循环中忙轮询