Puede escribir un servidor de tuberías de múltiples hilos creando repetidamente un NamedPipeServerStream y esperando una conexión, y luego generando un hilo para esa instancia de NamedPipeServerStream.
Solo puede tener 254 clientes simultáneos según la documentación de .NET MSDN vinculada a continuación. Para las API de Win32, aunque puede pasar un valor especial para obtener un número ilimitado en función de los recursos del sistema. Parece que la documentación de MSDN es incorrecta, como se indica a continuación.
El código de abajo no se prueban así que por favor no se limitan a copiar y pegar para su uso en producción sin pruebas:
public class PipeServer
{
bool running;
Thread runningThread;
EventWaitHandle terminateHandle = new EventWaitHandle(false, EventResetMode.AutoReset);
public string PipeName { get; set; }
void ServerLoop()
{
while (running)
{
ProcessNextClient();
}
terminateHandle.Set();
}
public void Run()
{
running = true;
runningThread = new Thread(ServerLoop);
runningThread.Start();
}
public void Stop()
{
running = false;
terminateHandle.WaitOne();
}
public virtual string ProcessRequest(string message)
{
return "";
}
public void ProcessClientThread(object o)
{
NamedPipeServerStream pipeStream = (NamedPipeServerStream)o;
//TODO FOR YOU: Write code for handling pipe client here
pipeStream.Close();
pipeStream.Dispose();
}
public void ProcessNextClient()
{
try
{
NamedPipeServerStream pipeStream = new NamedPipeServerStream(PipeName, PipeDirection.InOut, 254);
pipeStream.WaitForConnection();
//Spawn a new thread for each request and continue waiting
Thread t = new Thread(ProcessClientThread);
t.Start(pipeStream);
}
catch (Exception e)
{//If there are no more avail connections (254 is in use already) then just keep looping until one is avail
}
}
¿Cuál es el número máximo de solicitud de un cliente a un servidor de canalización con nombre? – Ehsan
No hay límite en la cantidad de lecturas y escrituras que un cliente puede realizar en un conducto con nombre durante el tiempo que ambos extremos del conducto estén abiertos. –