Название: межпроцессное взаимодействие Отправлено: leonike от Май 07, 2011, 11:51 Привет всем. Возник такой вопрос.
Необходимо реализовать интерфейс для взаимодействия с другими программами (т.е. другие программы смогут использовать функционал моей программы). В Linux это можно сделать посредством dbus. Есть ли кроссплатформенный инструмент или придется пилить реализацию для каждой операционки отдельно? Если нет, какие инструменты посоветуете для linux, windows, mac os? Название: Re: межпроцессное взаимодействие Отправлено: asvil от Май 07, 2011, 12:27 Если функции программа предоставляет интерфейс не имеющий состояний, то реализуете каждую функцию (или набор функций) в виде программы принимающей аргументы командной строки, с возвратом значения в stdout, ошибок в stderr.
А далее можно подумать и управление программой осуществлять через stdin, а не аргументами командной строки. Это значит, что Ваша задача сводится к написанию некоторого telnet сервера, которыми оснащаются сетевые устройства например. Автоматизированное управление данным сервером можно осуществлять сценариями командной строки клиентской операционной системы. Впринципе крассплатформенность/сетевая прозрачность обеспечена. Защита передаваемых данных с помощью ssh. Название: Re: межпроцессное взаимодействие Отправлено: merke от Май 07, 2011, 12:39 Pipe - QLocalServer, QLocalSocket; QSharedMemory
Название: Re: межпроцессное взаимодействие Отправлено: Igors от Май 07, 2011, 15:08 Многое зависит от того должны ли 32 и 64-битные приложения общаться между собой. Если все "только 32" (или только 64), то просто dll (dylib). Если же "смешанный" вариант, то сложнее - либо на сокетах, либо (если нужна скорость) на семафорах и shared memory
Название: Re: межпроцессное взаимодействие Отправлено: merke от Май 07, 2011, 17:31 А можно поподробнее об этом? О таком я ещё не слышал
Название: Re: межпроцессное взаимодействие Отправлено: Igors от Май 08, 2011, 08:53 А можно поподробнее об этом? О таком я ещё не слышал Если это вопрос ко мне и по поводу 32/64 - то использовать dll (приятные во всех отношениях) не удается т.к. на любой платформе 32 хост не может звать 64 dll и наоборот. Простейший вариант для 2 приложений (32 и 64) - создать 2 shared семафора. Каждое приложение ждет на одном (возможно 1 ниткой) и сигналит по другому. Как только сигнал получен - данные забираются из shared memory.Название: Re: межпроцессное взаимодействие Отправлено: kolob от Май 21, 2011, 22:17 Цитировать с возвратом значения в stdout, ошибок в stderr. Вопрос наверно немного не в тему. Но все же, подскажите как объединить вывод в file и stderr на консоль? Название: Re: межпроцессное взаимодействие Отправлено: ddrtn от Июнь 02, 2011, 08:56 Если клиенты планируются только кутешные, то можно воспользоваться либой QXT. в ней реализован RPC протокол на основе механизма сигналов/слотов. там фактически сигнал передается другому процессу через QIODevice.
Для отвязки клиентов от Qt можно реализовать свой небольшой RPC сервис. я делал на базе Hessian. Название: Re: межпроцессное взаимодействие Отправлено: ecspertiza от Июнь 03, 2011, 15:24 В свое время для реализации общения демона с ГУИ использовал RPC вот отсюда http://deltavsoft.com/w/ довольно удобно, но придется еще и boost к проекту подключать. Сам не в курсе ,но интересно ,а QtDBus не подойдет ?
Название: Re: межпроцессное взаимодействие Отправлено: kuzulis от Июнь 03, 2011, 15:57 В свое время для реализации общения демона с ГУИ использовал RPC вот отсюда http://deltavsoft.com/w/ довольно удобно, но придется еще и boost к проекту подключать. Сам не в курсе ,но интересно ,а QtDBus не подойдет ? Нет, в винде с ним проблемы. ИМХО, проще QLocalSocket/Server (как выше советовали).Название: Re: межпроцессное взаимодействие Отправлено: lesav от Июнь 03, 2011, 20:11 Делал подобное. Использовал UDP (Изначально не хотел привязываться к TCP)
В моем обмене нет больших объемов передаваемых данных. Ставка делалась на скорость (устройства используют GPRS). Все данные перед отправкой сжимаются в qcompress. На принимающей стороне qUncompress. Результатом доволен. Название: Re: межпроцессное взаимодействие Отправлено: lesav от Июнь 04, 2011, 09:55 Забыл добавить:
При отладке механизма обмена на локальной машине отметил, что такая методика оказалась удобной и для обмена командами/данными для межпроцессного взаимодействия (если убрать функционал сжатия трафика). Название: Re: межпроцессное взаимодействие Отправлено: merke от Июнь 04, 2011, 11:08 Думаю если ещё и архивировать данные, это будет накладно. Да если просто команды то лучше не компресить их, а отправлять так как есть.
Название: Re: межпроцессное взаимодействие Отправлено: lesav от Июнь 05, 2011, 07:59 Безусловно! Один 1-8 байт нет смысла сжимать. А вот 0,5 - 64 кб уже смысл есть, тем более если команды и данные передаются в ASCII символах.
|