Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O servidor de pipe mais simples cria uma única instância de um pipe, conecta-se a um único cliente, se comunica com o cliente, desconecta-se do cliente, fecha a alça do pipe e termina. No entanto, é mais comum que um servidor de pipe se comunique com vários clientes de pipe. Um servidor de pipe poderia usar uma única instância de pipe para se conectar a vários clientes de pipe conectando-se e desconectando-se de cada cliente em sequência, mas o desempenho seria ruim. O servidor de pipe deve criar várias instâncias de pipe para lidar com vários clientes simultaneamente.
Há três estratégias básicas para a manutenção de várias instâncias de tubo.
- Crie um thread separado para cada instância do pipe. Para obter um exemplo de um servidor de pipe multithreaded, consulte Multithreaded Pipe Server.
- Use operações sobrepostas especificando uma estrutura de OVERLAPPED no ReadFile, WriteFilee funções de ConnectNamedPipe. Para obter um exemplo, consulte Named Pipe Server Using Overlapped I/O.
- Use operações sobrepostas usando o ReadFileEx e funções de WriteFileEx, que especificam uma rotina de conclusão a ser executada quando a operação for concluída. Para obter um exemplo, consulte Named Pipe Server Using Completion Routines.
O servidor de pipe multithreaded é mais fácil de escrever, porque o thread para cada instância lida com comunicações para um único cliente de pipe. O sistema aloca o tempo do processador para cada thread conforme necessário. Mas cada thread usa recursos do sistema, o que é uma desvantagem para um servidor de pipe que lida com um grande número de clientes.
Com um servidor de thread único, é mais fácil coordenar operações que afetam vários clientes e é mais fácil proteger recursos compartilhados do acesso simultâneo por vários clientes. O desafio de um servidor de thread único é que ele requer coordenação de operações sobrepostas para alocar o tempo do processador para lidar com as necessidades simultâneas dos clientes.