LINUX.ORG.RU

Межпроцессное взаимодействие

 , ,


0

3

Собственно хочется несколько странного - к демону, написанному на C++ с использованием Qt (без графики), хочется прикрутить GUI и консольный интерфейс, возможно даже дать возможность для написания web-морды. Есть много способов сделать это, от низкоуровневых вещей, до всяких dbus-ов. Однако, хотелось бы, чтобы программа работала и под Windows и под Linux. Особо сложной логики между демоном и UI не предусматривается - вся логика в демоне, внешнее приложение должно только посылать запрос и получать ответ (в худшем случае около миллиона строк в utf-8). Ах, да, есть желание приделать к нему плагин для synapse (того, что launcher). Там плагины на vala пишутся, в основном через консольку, либо через d-bus то что я хочу делают, но d-bus плохо себя чувствует вне Linux-а (поправьте если не так и его допилили до юзабельного состояния под Windows). А оставлять маководов (ну на них по большому счету наплевать) и виндузятников (а они мне нужны) в пролете не хочется. Готов выслушать ваши мнения, может кто-то уже сталкивался с подобной задачей (например, авторы transmission её как-то решили).

★★★★★

авторы transmission её как-то решили

Нет. У них либо сеть (сокеты), либо всё в одном процессе.

// мимокрокодил

intelfx ★★★★★ ()
Ответ на: комментарий от RazrFalcon

QSharedMemory

Этот способ мне показался паршивым и костыльным, когда приложение может внезапно упасть, тогда какие-то ссылки/файлы не чистятся... Не помню точно.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Так там семафоры нужно использовать. Память-то общая. Не шибко удобно, зато очень быстро + сереализация Qt типо из коробки.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от intelfx

А через сокеты на локалхосте (127.0.0.1) то что я хочу сделать возможно? Или это будет ещё более костыльно? Просто с сетью я особо не работал.

peregrine ★★★★★ ()
Ответ на: комментарий от peregrine

с сетью будет самое совместимое, учитывая венду
напиши класс интерфейс, который будет базово обмениваться и реализуй сеть
не понравится - реализуй иной способ, но интерфейс будет тотже

x905 ★★★★★ ()
Ответ на: комментарий от peregrine

А через сокеты на локалхосте (127.0.0.1) то что я хочу сделать возможно?

Через сокеты возможно и на локалхосте, и в сети. Единственно, с точки зрения производительности использовать сокеты на локалхосте может быть не самым оптимальным, зато максимально совместимым.

Я бы, если бы мне нужна была совместимость, первым делом сделал на tcp-, а ещё лучше на udp-сокетах (но udp пакет ограничен по длине значением mtu-размер_заголовка и не может быть больше 64k, а если самому собирать пакеты в нужном порядке, то это будет тот же tcp, только доморощенный), потестировал, если скорость обмена данными устраивает, то хорошо. Если нет, то начал бы прикручивать более эффективные, но менее переносимые способы обмена данными, оставляя возможность продолжать пользоваться сокетами. Тогда и переносимость не пострадает, и эффективность по крайней мере на некоторых платформах будет приемлемой. Хотя, вангую, скорее всего и сокетов хватит для быстрого обмена сообщениями на локалхосте. Да ещё и доп. фича появится: возможность общения с демоном через сеть.

aureliano15 ★★ ()

Сделать простейший HTTP. И тестировать удобно, и для вебморды подойдет.

vromanov ★★ ()

Я бы взял QWebSocket + json rpc

pon4ik ★★★★★ ()
Ответ на: комментарий от arcanis

Поэтому вполне себе адекватный вариант для кроссплатформенного приложения.

evilface ★★ ()

...низкоуровневых вещей...

...Windows и под Linux...

Без костылей - никак.

Я свой «швейцарский нож» писал с отдельными нативными либами под Windows и Linux.

Deleted ()
Ответ на: комментарий от peregrine

А через сокеты на локалхосте (127.0.0.1) то что я хочу сделать возможно?

Зачем 127.0.0.1, используй AF_UNIX (QLocalSocket/Server)

annulen ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.