Использование именованных каналов. Несколько клиентов, один сервер, несколько параллельных запросов

Я пытаюсь реализовать сервер именованных каналов в .NET. Клиент будет C ++. Природа отправленных данных не имеет отношения к вопросу.

Моя первая наивная реализация выглядит примерно так:

using (NamedPipeServerStream stream = 
                new NamedPipeServerStream(PipeName,
                                          PipeDirection.InOut, 
                                          numberOfListeners,
                                          PipeTransmissionMode.Message))
{
     while (true)
     {
          try
          {
              stream.WaitForConnection();

              var request = ReadRequest(stream);

              var reply = Process(request);
              WriteReply(stream, reply);
              stream.WaitForPipeDrain();
          }
          catch (Exception ex)
          {
              //TO DO: log
          }
     }
 }

Я правильно подхожу к этому?

Что произойдет, если два клиента одновременно откроют соединение?

Будут ли они использовать один и тот же поток, и данные будут смешиваться?

Как я могу этого избежать?

Любые идеи или ресурсы по этому поводу помогут. Я новичок в этой теме.

15
задан Kev 7 April 2011 в 16:39
поделиться