使用命名管道实现CD数据库的客户端 - 服务器系统
1. 命名管道工作原理
服务器以只读模式创建并打开其命名管道(FIFO),然后进入阻塞状态,直到有客户端以写模式打开同一管道,服务器进程才会被解除阻塞。客户端打开服务器的FIFO后,会创建自己的唯一命名FIFO用于接收服务器的响应。之后,客户端向服务器写入数据,若管道已满或服务器在休眠则会阻塞,写完后会阻塞等待自己FIFO中的响应。服务器收到客户端数据后,处理数据,打开客户端的管道并将处理结果写回,从而解除客户端的阻塞。
当最后一个客户端关闭服务器管道时,服务器的读操作会失败(返回0)。若要让服务器继续等待新客户端,可采取以下两种方法:
- 打开服务器管道的文件描述符,使读操作始终阻塞而非返回0。
- 当读操作返回0字节时,关闭并重新打开服务器管道,让服务器像初始启动时一样阻塞等待客户端。
2. CD数据库应用改造
2.1 改造目标
- 将处理数据库的部分与用户界面部分分离。
- 运行单服务器进程,支持多个并发客户端。
- 尽量减少对现有代码的修改。
- 能够在应用内部创建和删除管道,无需系统管理员预先创建命名管道。
- 避免“忙等待”,利用管道的阻塞特性高效使用CPU。
2.2 编译应用
如果有网站上的源代码,可使用makefile将其编译成服务器和客户端程序。不同发行版对dbm文件的命名和安装方式略有不同,若提供的文件在当前发行版上无法编译,可参考相关章节获取dbm文件命名和位置的建议。运行 ser
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



