В настоящее время я работаю над многозадачным настольным приложением в Windows. Это приложение будет сжатым приложением, которое будет развернуто на клиентских компьютерах по всему миру. Хотя мы можем иметь широкие спецификации для машин - например, Windows XP SP3 с .Net 4.0 CF, мы не будем контролировать их, и мы не можем быть слишком конкретными в их конфигурации - например. мы не можем указать, что на машине должен быть графический процессор с поддержкой cuda 1.4 и т.д.
Некоторые из этих процессов управляются (.Net 4.0), а другие неуправляемы (С++ Win32). Процессам необходимо обмениваться данными. Параметры, которые я оценил до настоящего времени,
- Разъемы Tcp
- Именованные каналы
Трубы, похоже, работают немного лучше, но для наших нужд - производительность от обоих приемлема. И сокеты дают нам гибкость скрещивания машин (и операционных систем - мы хотели бы в будущем поддерживать не-Microsoft-операционные системы) в будущем, поэтому мы предпочитаем переходить с сокетами.
Однако, моя главная проблема заключается в следующем: если мы будем использовать сокеты Tcp, мы, вероятно, столкнемся с проблемами с брандмауэрами? Кто-нибудь еще развернул настольные приложения/программы, использующие TCP для IPC и возникшие проблемы? Если да - какой?
Я знаю, что это довольно открытый вопрос, и я буду рад перефразировать. Но я действительно хотел бы знать, какие потенциальные проблемы мы можем столкнуться.
edit: Чтобы выпустить немного больше света, мы переносим только несколько POD, ints, float и strings. Мы создали слой абстракции, который предлагает 2 парадигмы - запрос/ответ и подписку. Транспортный уровень был абстрагирован, и в настоящее время мы имеем две реализации: на основе протокола и TCP.