C ++ IPC замена для локального интерфейса COM? - PullRequest
1 голос
/ 23 ноября 2010

Текущая настройка:

Собственное приложение Windows C ++ предоставляет интерфейс COM, который используется (стиль RPC, простые вызовы функций) рядом исполняемых модулей плагина. Связь только на локальной машине.

[App.exe (COM server)] <-> [plugin1.exe (COM client / possible callbacks etc.)]
                       <-> [plugin2.exe (COM client)]

Теперь мы хотели бы заменить интерфейс COM чем-то другим для выбранных плагинов.

Какие варианты есть у нас для локального IPC "RPC-стиля", который будет так же прост в использовании, как COM?

Применяются следующие ограничения:

  • Производительность должна быть как минимум такой же, как и у локальных COM-вызовов. (В свете ответа Стива любая альтернатива, которая не будет работать значительно хуже, чем локальные внепроцессные COM-вызовы, уже будет полезна!)
  • Интерфейс должен быть простым в использовании. Никаких явных манипуляций с памятью и необработанными сокетами при использовании интерфейса в клиентах или на сервере.
  • родной C ++ для Windows

1 Ответ

2 голосов
/ 23 ноября 2010

Производительность между процессами никогда не будет сопоставлять локальный COM с внутрипроцессным сервером, поскольку внутрипроцессные вызовы COM сводятся к простому вызову функции в вызывающем потоке.Для межпроцессного трафика ВСЕГДА будут происходить маршалинг и переключение контекста, что замедляет процесс.

Если сделать еще один шаг вперед, вряд ли вы создадите что-либо столь же простое, как у COMвсе как и COM.Для локальных внепроцессных серверов COM будет работать через оптимизированный стек RPC, который называется LRPC .

...