如果同一时刻有多个客户端请求服务器处理数据,按照之前方式都是串行处理。
多进程多线程
多线程服务端代码代码
监听是一个线程,有客户端到达,再创建一个线程为客户端服务。
1 |
|
当有100个客户端连接时,服务器端得创建100个函数线程来运行
多进程服务端代码
1 |
|
从这可以看到服务器输出的都是一个4,而不是以往的每一个客户端对应一个。服务器第一次接收数据会得到4这个文件描述符,但是发送完消息就把c给关了,所以下一次还是从4开始。所以不能用c来判断是否是一个客户端,要用IP地址和端口号来判断。
一个进程打开一个文件sys_open()->确定一个可用的文件描述符
1 | for(fd=0;fd<20;++fd) |
那为什么文件描述符都是从4开始的,以前太菜不知道为什么,查询一番后,一个进程会默认打开三个文件描述符:0 标准输入 1 标准输出 2 标准错误输出 然后3有个sockfd这个操作,所以后续会从4开始。