È possibile scrivere un server pipe multi thread creando ripetutamente un NamedPipeServerStream e attendendo una connessione, quindi creando un thread per quell'istanza di NamedPipeServerStream.
È possibile avere solo 254 client simultanei secondo la documentazione MSDN .NET collegata di seguito. Per le API Win32, tuttavia, è possibile passare un valore speciale per ottenere un numero illimitato in base alle risorse di sistema. Sembra che la documentazione MSDN sia errata come indicato di seguito.
Il codice qui sotto non è testato quindi per favore non semplicemente copiare e incollare per l'uso in produzione, senza prove:
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
}
}
fonte
2011-02-20 02:20:01
cosa è il numero massimo di richiesta da un client a un server di nome pipe? – Ehsan
Non esiste un limite al numero di letture e scritture che un client può eseguire su una named pipe per tutto il tempo in cui entrambe le estremità della pipe sono aperte. –