Linux网络编程入门 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

上述实现的并发服务端,只是一个最简单的雏形,分析可以发现一些问题:

1.每次新连接一个客户,都创建一个进程,其实是很不合理的。原因如下:

  • 频繁的创建和销毁进程开销会很大,因此为每一个客户都创建一个新的进程会很浪费很多服务器资源
  • 受限于服务器的硬件资源,如内存、CPU等,创建再多的进程并不能提高更高的性能

2.每次调用系统函数recv或者send进行读写数据其实是有缺陷的。比如我们要接受(或发送)长度为len的数据,recv(或者send)成功时返回实际读取(写入)的数据长度,可能小于长度len,因此我们需要多次 多次调用recv(或send),循环读写 保证完整接受(发送)数据。

3.信号处理机制缺乏,上述服务端未有效处理僵尸进程,对于EINTR错误也未有效处理。