C# Sockets vs Pipes

В настоящее время я работаю над многопроцессорным настольным приложением для Windows. Это приложение будет упакованным приложением, которое будет развернуто на клиентских машинах по всему миру. Хотя у нас могут быть широкие спецификации для машин - например. Windows XP SP3 с .Net 4.0 CF, мы не можем контролировать их и не можем быть слишком конкретными в их конфигурации - например. мы не можем указать, что машина должна иметь графический процессор с поддержкой cuda 1.4 и т. д.

Некоторые из этих процессов являются управляемыми (.Net 4.0), а другие неуправляемыми (C++ Win32). Процессы должны обмениваться данными.На сегодняшний день я оценил следующие варианты:

  • Tcp-сокеты
  • Named Pipes

Pipes, кажется, работают немного лучше, но для наших нужд производительность обоих приемлема. А сокеты дают нам гибкость в преодолении машинных (и операционных систем — мы хотели бы в конечном итоге поддерживать операционные системы, отличные от Microsoft) границ в будущем, поэтому мы предпочитаем использовать сокеты.

Однако меня больше всего беспокоит следующее: если мы будем использовать сокеты Tcp, не возникнет ли у нас проблем с брандмауэрами? Кто-нибудь еще развернул настольные приложения/программы, использующие TCP для IPC, и столкнулся с проблемами? Если да - то какой?

Я знаю, что это довольно открытый вопрос, и я буду рад перефразировать его. Но я действительно хотел бы знать, с какими потенциальными проблемами мы можем столкнуться.

edit:Чтобы пролить немного больше света - мы транспортируем только несколько POD, целых чисел, чисел с плавающей запятой и строк. Мы построили уровень абстракции, который предлагает 2 парадигмы — запрос/ответ и подписка. Транспортный уровень был абстрагирован, и в настоящее время у нас есть две реализации — на основе канала и на основе TCP.

11
задан quixver 5 June 2012 в 14:40
поделиться