0%

网络编程 - 多并发服务器

在 Linux 环境下多进程的应用很多,其中最主要的就是网络/客户服务器。多进程服务器是当客户有请求时,服务器用一个子进程来处理客户请求。父进程继续等待其它客户的请求。这种方法的优点是当客户有请求时,服务器能及时处理客户,特别是在客户服务器交互系统中。对于一个 TCP 服务器,客户与服务器的连接可能并不马上关闭,可能会等到客户提交某些数据后再关闭,这段时间服务器端的进程会阻塞,所以这时操作系统可能调度其它客户服务进程,这比起循环服务器大大提高了服务性能。

多并发服务器

多进程并发服务器

首先回顾一下单个链接的处理方式:

  • 创建套接字 - 监听
  • 绑定
  • 鉴定 - listen(lfd,blcklog);
  • 接受连接请求
  • 通信

梳理一下多进程并发服务器的方式:

  • 创建套接字 - 监听
  • 绑定
  • 鉴定 - listen(lfd,blcklog);
  • ————–分割线
  • 接受连接请求交给父进程,有新的连接请求则fork新进程
    • 接受连接请求
    • 通信

使用多进程的方式, 解决服务器处理多连接的问题:

  1. 共享

    • 读时共享, 写时复制
    • 文件描述符
    • 内存映射区 – mmap
  2. 父进程 的角色是什么?

    • 等待接受客户端连接 – accept

      • 有链接:

        • 创建一个子进程 fork()
      • 将通信的文件描述符关闭

  3. 子进程的角色是什么?

    • 通信

      • 使用accept返回值 - fd
    • 关掉监听的文件描述符

      • 浪费资源
  4. 创建的进程的个数有限制吗?

    • 受硬件限制
    • 文件描述符默认也是有上限的1024
  5. 子进程资源回收

    • wait/waitpid

    • 使用信号回收

      • 信号捕捉:

        • signal
        • sigaction - 推荐
      • 捕捉信号: SIGCHLD

1