Простые анонимные каналы — какую модель оболочки вы используете? (ВинАПИ, С++)

У меня есть два запущенных процесса в Windows, и каждый процесс имеет канал к другому.

Я хочу сериализовать сложный класс и передать его от одного процесса к другому. У меня уже отработана процедура сериализации, и я понимаю, что по каналам отправляются бинарные потоки. Как я должен отправлять свои сериализованные данные? Я использую WinAPI и C++.

Должен ли я разработать собственный протокол? Если да, то должен ли он быть общим или уникальным для этого конкретного класса? Могу ли я сохранить виртуальные таблицы при отправке сериализованного класса?

Существуют ли какие-либо модели или шаблоны проектирования, которые обычно используются в этом случае? Небольшой пример кода будет принят с благодарностью. Спасибо!


person bgee    schedule 07.12.2008    source источник


Ответы (4)


Вот учебник для boost::serialization. Я мог представить, что это будет работать нормально, отправляя данные по каналу и десериализуя на другой стороне: http://www.boost.org/doc/libs/1_37_0/libs/serialization/doc/tutorial.html

person Johannes Schaub - litb    schedule 07.12.2008

Вы можете проверить буфер протокола.

person ididak    schedule 07.12.2008

Вы можете использовать boost::asio::windows::stream_handle для организации iostream, как io, и делать это асинхронно.

person Evgeny Lazin    schedule 07.12.2008

Вам не нужно беспокоиться о виртуальных таблицах, так как ускоренная сериализация будет беспокоиться о типах. Единственное, что вам нужно сделать, это убедиться, что любой тип является сериализованным, а затем вы используете ТОЧНЫЙ ТОТ ЖЕ ТИП на другой стороне при десериализации.

person Mark Kegel    schedule 07.12.2008
comment
Так что нет какой-то «общей» модели\протокола... Скажем, несколько разных классов? - person bgee; 09.12.2008