基于命名管道的CD数据库应用开发详解
1. 命名管道通信原理
在客户端 - 服务器系统中,命名管道(FIFO)是一种重要的进程间通信方式。服务器首先以只读模式创建其FIFO并进入阻塞状态,等待第一个客户端以写模式打开相同的FIFO进行连接。一旦客户端连接,服务器进程解除阻塞,开始处理客户端请求。在此过程中,为了演示多客户端并发的情况,会执行一个 sleep 操作,使客户端的写入请求排队等待处理(在实际应用中,这个 sleep 操作会被移除)。
客户端在打开服务器的FIFO后,会创建一个唯一命名的FIFO用于接收服务器的响应。然后,客户端将数据写入服务器的FIFO(如果管道已满或服务器仍在休眠,客户端会阻塞),并阻塞等待从自己的FIFO中读取服务器的回复。
服务器接收到客户端的数据后,对其进行处理,以写模式打开客户端的FIFO,并将处理结果写回,从而解除客户端的阻塞状态。客户端解除阻塞后,就可以从自己的管道中读取服务器发送的数据。
整个过程会一直重复,直到最后一个客户端关闭服务器的管道,此时服务器的读取操作会失败(返回0),因为没有进程以写模式打开服务器的管道。如果这是一个需要持续等待新客户端请求的真实服务器进程,可以采用以下两种方法进行处理:
- 打开一个指向自己服务器管道的文件描述符,使 read 操作始终阻塞,而不是返回0。
- 当 read 操作返回0字节时,关闭并重新打开服务器的管道,使服务器进程在 open 操作中阻塞,等待新的客户端连接,就像服务器首次启动时一样。
超级会员免费看
订阅专栏 解锁全文
39

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



