Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > реализации RPC на С++ |
Автор: GoldFinch 8.8.2009, 21:04 |
какие есть реализации RPC (remote procedure call) на С++ удобные в плане расширения-переделки, написания пользовательского кода? какие вообще есть подходы к реализации RPC на С++ ? |
Автор: GoldFinch 8.8.2009, 21:23 |
интересны только библиотеки с открытым исходным кодом, чтобы можно было допилить под конкретную задачу, а не COM и т.п. |
Автор: Cheloveck 8.8.2009, 23:48 |
http://ru.wikipedia.org/wiki/CORBA |
Автор: Любитель 9.8.2009, 07:08 |
Для обычного SOAP можно найти библиотечки. |
Автор: azesmcar 9.8.2009, 08:09 |
http://libiqxmlrpc.wikidot.com/ http://ulxmlrpcpp.sourceforge.net/ http://xmlrpc-c.sourceforge.net/ http://xmlrpcpp.sourceforge.net/ http://sourceforge.net/projects/xmlrpcc4win/ |
Автор: GoldFinch 9.8.2009, 11:47 | ||||||
омг почему они все такие неудобные? мне надо взять готовую систему, и поделить на 2 части, связав их RPC, при этом процесс разделения должен вносить минимальные изменения в код системы, например было
а стало
но писать на каждую функцию\метод по заглушке я не хочу, а хочу чтобы они както генерились библиотекой RPC транспорт (сетевой протокол) мне нужен свой, он у меня есть, своя сериализация у меня тоже есть проблема только в самом RPC, как его получше сделать например возможен такой код
а всякие реализации CORBA, XML-RPC со своими транспортами и необходимостью писать МНОГО кода - мне не нужны даже в статье http://www.rsdn.ru/article/files/libs/RPCLib.xml более удобное решение, правда с дефайнами |
Автор: Любитель 9.8.2009, 12:50 |
Если ты хочешь использовать собственный протокол - то зачем нужна библиотека?! Сделать обёртку для вызова метода - вообщем-то можно. Автоматически подставить везде вызов обёртки невозможно само собой. Должен быть способ опознавания ремоут-метода от не-ремоут. Удобный вариант - если у тебя все ремоут-методы через интерфейсы вызываются и создаются через фабрику. Тогда можно написать генератор реализаций обёрток (и самой фабрики) и использовать полученный код. |
Автор: GoldFinch 9.8.2009, 15:11 | ||||
mes, допустим заглушка выглядит так. разница между DEF_RPC_CALL_2 (f, 8, int, int) и void f(int a, int b) DEF_RPC_CALL(8, f) не слишком велика ----------------------- Пока у меня получается что у клиента есть допустим такой код
а у сервера такой
хотелось бы привести оба заголовка к общему виду, и спрятать строки которые можно спрятать |
Автор: GoldFinch 9.8.2009, 15:35 | ||
upd: вместо
можно написать class Bar : public rpc_cfg<Bar> |
Автор: GoldFinch 9.8.2009, 16:14 | ||||
upd2 template<typename Archive> void Bar::Dispatch(rpc_id_t id,Archive ar) можно вынести из класса в отдельную функцию template<typename idT, typename Archive> void Dispatch(Bar* that, idT id, Archive ar) тогда от .h файлов останется только
и
|
Автор: mes 9.8.2009, 17:54 | ||
разница в неиспользовании AddressOfReturnAddress() и в отсутствии повторного дублирования имени функции. |
Автор: GoldFinch 9.8.2009, 18:07 |
mes, и еще во внешнем виде объявления, и необходимости подсчета числа параметров аналог _AddressOfReturnAddress() есть и в gcc, так что это небольшое зло |
Автор: GoldFinch 9.8.2009, 20:11 | ||
чтобы был пример, вдруг я упустил какой-нибудь хорошой способ реализации так например глядя на буст.сериализацию, я написал свою сериализацию без аналога писать сложнее. |
Автор: GoldFinch 10.8.2009, 14:24 |
неужели это такой 0day что нигде никаких аналогов нет %) |
Автор: andrew_121 16.1.2010, 01:39 | ||
тот же вопрос. ты на чем остановился? |
Автор: GoldFinch 16.1.2010, 13:55 |
andrew_121, на том что для моей задачи проще обойтись без RPC, чем писать свое RPC |
Автор: andrew_121 16.1.2010, 14:47 |
andrew_121, значит ты так и не решил вопрос? |
Автор: GoldFinch 16.1.2010, 18:56 |
;) не, решил что мне не нужен этот вопрос на С++ это слишком неудобно делать, синтаксис у него плохой и интроспекции нету Добавлено через 1 минуту и 47 секунд разве что писать кодогенератор который будет парсить .h c интерфейсами файлов и генерить для них код для RPC а средствами самого С++ слишком неудобно |
Автор: andrew_121 16.1.2010, 19:52 |
понятно. спасибо. |
Автор: Любитель 16.1.2010, 21:32 | ||
Ну да, это типичное решение. QtDBus, скажем, так и работает. Просто генератор (moc) написан давно и.. не только для этого. |
Автор: jonie 17.1.2010, 01:11 |
gSOAP... конечно, не похож на RPC, но удобен. |
Автор: andrew_121 22.1.2010, 06:41 |
мдя.. велоизобретательство ни к чему не привело ![]() нашел прекрасную реализацию RPC: проект - http://www.codeproject.com/KB/threads/Rcf_Ipc_For_Cpp.aspx доки - http://deltavsoft.com/RcfUserGuide/ |