简单服务器的问题避免
来源:互联网 发布:大数据时代 四大挑战 编辑:程序博客网 时间:2024/06/14 10:01
一。
1. 多进程服务器; 一个管理进程, 当客户端链接时, 起一个子进程与客户端进程通信;
2. 客户端:普通客户端程序, 与服务器之间保持长链接。
3.问题:
此时设计到一个问题,当起 n 个客户端连接服务器时;服务器会产生 n 个子线程,用于各客户端通信,此时,加入一个客户端主动关闭链接,
服务器应该关掉它对应的子进程,并对这个子进程进行回收,防止产生僵尸进程。
① 注册信号,当客户端主动断开连接, 服务器子进程会退出, 此时会向父进程,发送 SIGCHID 信号;父进程注册信号处理函数; signal(SIGCHID, func_data);
func_data() { wait(NULL); } (伪代码, 该函数的格式不对)。
会调用该信号函数回收子进程;
②加入:多个链接客户端同时关闭连接, 此时会同时向服务器发送:FIN标识位,服务器多个子进程同时退出, 并同时向主进程 发出SIGCHID信号; 这时,上面的
程序设计就出现问题。 因为: SIGCHID 信号是不可靠信号,当多个信号同时向父进程发送时, 服务器主进程可能回处理 1 个, 或多个 < n, 或者n个(理想状态),那么就会有很大可能产生僵尸进程。 为了避免这种情况的发生; 上面的信号注册函数, 就应该写成这样, 才可以避免该问题。
func_data() { int mypid = 0; while( ( mypid = waitpid(-1, NULL, WNOHANG ) ) > 0 { ; (此处循环可以为空)} } 。
0 0
- 简单服务器的问题避免
- 服务器的基本问题避免
- 后端服务器如何简单的避免重复提交?
- 软件设计(1)--避免的问题
- 避免TableViewCell重叠的问题
- Ajax发送服务器的中文避免乱码
- 游戏服务器最基本要避免BUG问题
- Toast避免重复点击的简单解决
- java简单实现Http服务器,及遇到的问题
- 简单谈谈xampp本地服务器的Access forbidden配置问题
- 【服务器】简单的C++服务器
- 避免代理服务器的缓存带来的问题
- 避免代理服务器的缓存带来的问题
- 正在进行调试的 Web 服务器进程已由 Internet 信息服务器(IIS)终止。可以通过在 IIS 中配置应用程序池 Ping 设置为避免这一问题
- 避免闭包引发的问题
- 关于避免多重包含的问题
- allegro 遇到的问题汇总 避免忘记
- javascript 避免闭包引发的问题
- Activity3---不经意的死掉onSaveInstanceState
- TABLE CONTROL使用方法(待整理)
- Android之Fragment源码级彻底解析上
- Apache2.2.22开启PathInfo模式的支持
- Dos之IF命令
- 简单服务器的问题避免
- 关系数据库的优化方法论基本是一致的
- 龟兔赛跑
- Dos之Call命令
- sql server中cast函数
- ABAP的PAI和PBO中的字段传递顺序
- ErrorLevel 的参数和设定
- 积最大的整数分解
- JavaBean