socket服务器编程:
顾名思义就是使用socket套接字来编写服务器程序的过程。不熟悉socket编程的小伙伴可以看我之前的文章,但是当时所实现的功能服务器同时只能和一个客户端进行交互,效率太低,利用多进程或者多线程方式来实现服务器可以做到同时和多个客户端进行交互。提高服务器的性能。
多进程的实现方式:
我们可以在程序中使用fork系统调用来创建一个子进程,父进程负责接收客户端的连接,并从监听队列中取出已经连接成功的一个客户端套接字,传给子进程,子进程来负责处理和唯一的一个客户端的交互。当我们将上面这个过程实现在一个while循环中时,父进程循环接收,循环创建子进程,每个子进程都可以处理一个客户端的请求,这样我们就可以同时和多个客户端进行交互。
原理:这里我们使用了fork系统调用的一个性质------->父子进程会共享fork之前创建的文件描述符。子进程创建出来之后,会将父进程的PCB结构复制一份,文件描述符也就会被复制过来,而父子进程的两个文件描述符,指向了同一个struct_file的结构体,在这个结构体中,有一个count属性,专门用来记录指向该结构体的文件描述符个数。
当count的值是0时,该结构体被释放,子进程创建出来