命名管道服务器进程

【勇芳软件工作室】汉化HomePreviousNext

最简单的服务器进程可以使用CreateNamedPipe函数来创建管道的单个实例,连接到单个客户端,与客户端通信,断开管道,关闭管道句柄并终止。但是,通常,服务器进程必须与多个客户端进程通信。服务器进程可以依次连接到每个客户端并断开连接,可以使用单个管道实例,但是性能会降低。为了同时处理多个客户端,服务器进程必须创建多个管道实例。

有三种基本策略用于维护多个管道实例。

*为管道的每个实例使用单独的线程创建多个线程(和/或进程)。有关多线程服务器进程的示例,请参阅多线程服务器.

*通过在ReadFileWriteFileConnectNamedPipe功能中指定OVERLAPPED结构来重叠操作。有关使用重叠操作的服务器进程的示例,请参阅服务器使用重叠输入和输出.

*使用ReadFileExWriteFileEx功能重叠操作,该函数指定操作完成时要执行的完成例程。有关使用完成例程的服务器进程的示例,请参阅服务器使用完成例程.

多线程服务器策略易于编写,因为每个实例的线程只处理单个客户端的通信。系统根据需要为每个线程分配处理器时间。但每个线程都使用系统资源,这对于处理大量客户端的服务器来说是一个潜在的缺点。如果一个客户端的操作需要与其他客户端进行通信(如网络游戏程序,一个玩家的移动必须传达给其他玩家),则会发生其他并发症。

使用单线程服务器,更容易协调影响多个客户端的操作,并且更容易保护共享资源(例如数据库文件),以免多个客户端同时访问。单线程服务器的挑战是需要协调重叠操作,以便为处理客户端的同时需求分配处理器时间。