㈠ 计算机网络知识点总结(六)Linux C++ Socket实现并发TCP服务器(fork)
本文阐述了使用 Linux 下的 fork 函数实现并发 TCP 服务器的过程。在编写并发 TCP 客户/服务器程序时,需要处理多客户端连接,实现并发处理,以提高服务器的响应效率。具体步骤如下:
1. 首先,客户机从标准输入读入一行文本,并将其发送给服务器。
2. 服务器则从网络输入读取这行文本,然后将文本回传给客户机。
3. 客户机再从网络输入读取这行回传的文本,并将其显示在标准输出上。
并发服务器与迭代服务器区别在于,迭代服务器每次只处理一个客户端连接,而并发服务器则允许同时处理多个客户端请求,使得服务效率提升。
并发服务器实现方式主要有三种:进程、线程和 IO 复用。本文通过 fork 函数实现并发处理,当一个客户端连接被处理后,服务器会继续处理下一个连接。
当客户机调用 socket 和 connect 函数时,TCP 的三路握手完成,连接建立。随后,客户机调用 send 函数发送文本,服务器则调用 accept 函数接受连接,并通过 fork 函数创建子进程。子进程调用 write 函数将输入信息回传给客户机,同时,服务器父进程继续调用 accept 函数等待下一个客户连接。
因此,系统中存在多个睡眠中的进程,包括客户进程、服务器父进程和服务器子进程。当客户机输入文本后,文本会通过网络回传至客户机的输出。
POSIX 信号处理机制允许进程在接收到特定事件时执行预定义的处理函数。信号可以由进程间传递,也可由内核触发。本文重点介绍了如何使用 signal 函数和 sigaction 函数来处理信号,包括捕获、忽略或使用默认处理方式。
以 SIGCHLD 信号为例,当子进程终止或停止时,父进程会接收到此信号。默认情况下,信号会被忽略。为了防止僵尸进程的产生,需要通过信号处理函数调用 wait 函数,以等待子进程结束。本文展示了如何定义和使用 sig__chld 函数来捕获并处理 SIGCHLD 信号,确保子进程能够被父进程正确等待。
最后,文章提及了 wait 和 waitpid 函数的原理和用法。其中,wait 函数阻塞当前进程直到等待到一个子进程终止,而 waitpid 函数则提供了更多控制,如指定等待的子进程 ID 和是否阻塞。
本文详细介绍了使用 fork 函数实现并发 TCP 服务器的过程,包括客户端与服务器的交互、并发处理方式、信号处理机制以及进程等待的实现。通过这些技术,可以构建高效、响应迅速的服务器系统。