Автор Тема: комуникация между 2 демона в линукс  (Прочетена 3256 пъти)

rcbandit

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
Търсих в интернет но не намирих отговор
Може ли С++ функция от демон А да извика функция в демон Б и с извикването да се предадат аргументи. Функцията в демон Б да обработи аргументите и да върне резултат на демон А? Възможна ли е такава директна комуникация?
Активен

n00b

  • Напреднали
  • *****
  • Публикации: 1248
  • Distribution: OSX
  • Window Manager: 10.6, 10.8, 10.9
  • Live to hack, hack to live.
    • Профил
Re: комуникация между 2 демона в линукс
« Отговор #1 -: Jan 15, 2011, 22:18 »
ДА - RPC му е мамата.
Активен

mobilio - професионални мобилни приложения

laskov

  • Напреднали
  • *****
  • Публикации: 3182
    • Профил
Re: комуникация между 2 демона в линукс
« Отговор #2 -: Jan 15, 2011, 22:36 »
А може би също и socket -и
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

rcbandit

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
Re: комуникация между 2 демона в линукс
« Отговор #3 -: Jan 15, 2011, 22:38 »
С това не се ли само праща съобщение?
п.п. Демоните работят на един сървър
За RPC се сещам само че може да се ползва XML-RPC
« Последна редакция: Jan 15, 2011, 22:59 от rcbandit »
Активен

n00b

  • Напреднали
  • *****
  • Публикации: 1248
  • Distribution: OSX
  • Window Manager: 10.6, 10.8, 10.9
  • Live to hack, hack to live.
    • Профил
Re: комуникация между 2 демона в линукс
« Отговор #4 -: Jan 15, 2011, 23:06 »
XML-RPC е някаква чалга, ама не е същото. Общо взето се пакетира в XML и се изпраща по HTTP.

Активен

mobilio - професионални мобилни приложения

rcbandit

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
Re: комуникация между 2 демона в линукс
« Отговор #5 -: Jan 15, 2011, 23:17 »
На мен ми трябва да направя комуникация между демони работещи на един сървър
« Последна редакция: Jan 15, 2011, 23:20 от rcbandit »
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3182
    • Профил
Re: комуникация между 2 демона в линукс
« Отговор #6 -: Jan 15, 2011, 23:35 »
Пример: clamd е демон на антивирусната програма ClamAV и създава сокет (във файловата система), напр. /var/run/clamav/clamd.socket
MailScanner праща на този сокет дали цялото писмо или име на директория, където то се намира, не знам, но получава информация от clamd дали писмото е заразено и ако да, с кой вирус.
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: комуникация между 2 демона в линукс
« Отговор #7 -: Jan 15, 2011, 23:59 »
IPC механизми има много. По-скоро кажи кои са ти изискванията:

* трябва ли демоните да са на един и същ хост?
* има ли вариант един процес да пише, много да четат или е peer-to-peer?
* готов ли си да жертваш удобство за производителност или обратното?
* приемливо ли е да ти се загубят съобщенията когато едната от страните я няма или не?
* доколко държиш на сигурността?
* доколко държиш на portability-то на цялата схема?
* трябва ли това да може да се scale-ва и в един момент да трябва и други процеси да си комуникират по същият начин?

От това следва и отговора.
Активен

"Knowledge is power" - France is Bacon

rcbandit

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
Re: комуникация между 2 демона в линукс
« Отговор #8 -: Jan 16, 2011, 00:10 »
Ето какво искам да постигна:
Искам да напиша приложение на C++ разделено на модули и едно ядро
Всеки модул и ядрото е отделен процес в линукс
Ядрото ще служи за комуникация между модулите но може това да отпадне.
Трябва ми начин C++ функция в модул А да може да вика функция в модул Б и да дава аргументи. Функцията в модул Б трябва да връща отговор.

Пример:
Модул А трябва да вземе общ брой на потребители в база данни. Модул Б служи за комуникация с базата данни.
Модул А извиква функция в модул Б и дава аргумент all_users. Функцията в модул Б се извиква и се свързва с базата данни. Прави операцията и връща като резултат ат повикването на модул А броя потребители.
Има ли някакъв удобен IPC механизъм за това?


* трябва ли демоните да са на един и същ хост?
да
* има ли вариант един процес да пише, много да четат или е peer-to-peer?
без значиние
* готов ли си да жертваш удобство за производителност или обратното?
без значиние
* приемливо ли е да ти се загубят съобщенията когато едната от страните я няма или не?
без значиние
* доколко държиш на сигурността?
без значиние
* доколко държиш на portability-то на цялата схема?
само на centos 64-bit ще бъде
* трябва ли това да може да се scale-ва и в един момент да трябва и други процеси да си комуникират по същият начин?
без значиние
« Последна редакция: Jan 16, 2011, 00:13 от rcbandit »
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: комуникация между 2 демона в линукс
« Отговор #9 -: Jan 16, 2011, 00:21 »
В такъв случай най-подходящи ми се виждат два варианта: или unix domain socket-и или shared memory. Наготово обаче няма да стане, трябва да си напишеш класове и съответните функции които се грижат за тези неща. Аз бих предпочел UDS-ите, малко по-малко разправии с глупости (на цената на малко по-кофти производителност).
Активен

"Knowledge is power" - France is Bacon

rcbandit

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
Re: комуникация между 2 демона в линукс
« Отговор #10 -: Jan 16, 2011, 00:30 »
как през shared memory ще извикаш клас, ще му дадеш аргументи и той съответно ще ти върте резултат?
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: комуникация между 2 демона в линукс
« Отговор #11 -: Jan 16, 2011, 00:45 »
Не можеш. Обаче можеш да организираш нещата така че евентуално при наличието на нещо в shared memory-то да се вика някаква функция, която връща някакъв резултат някъде там в shared memory-то. Няма начин един процес ей така да извика някакъв метод от някакъв клас от друг процес. C++ не е дизайн-ван по такъв начин. За това казах, трябва да се погрижиш. Примерно вдигаш една нишка, която цикли и периодично чете нещо от споделената памет, при определени неща там, прави нещо определено и така.
Активен

"Knowledge is power" - France is Bacon

rcbandit

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
Re: комуникация между 2 демона в линукс
« Отговор #12 -: Jan 16, 2011, 01:04 »
Ами ако се предава един голам XML файл с команди какво трябва модула да направи?
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: комуникация между 2 демона в линукс
« Отговор #13 -: Jan 16, 2011, 01:12 »
Ако ти се парсват XML-и :) Траспортният механизъм няма толкова значение, можеш спокойно XML-а да го пратиш по unix domain socket-а, можеш да го запишеш в shared memory-то (там определено ще си имаш повече драми и сигурно ще трябва да ползваш семафори или нещо подобно за да си сигурен че никой не чете докато пишеш). Наготово няма как един процес да викне функция от друг процес, няма такъв механизъм на ниско ниво. Да, сигурно джавистите с техните rmi глупости ще се радват да кажат нещо по въпроса, само дето те си живеят в някакъв техен свят където това им е даденост и грам не се замислят, че операционната система няма някакви готови механизми, които да им го правят и това става на цената на разни (далеч не винаги оптимални) операции.
« Последна редакция: Jan 16, 2011, 01:16 от gat3way »
Активен

"Knowledge is power" - France is Bacon

rcbandit

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
Re: комуникация между 2 демона в линукс
« Отговор #14 -: Jan 16, 2011, 01:24 »
Значи май XML остава еднствен вариант за голямо количество информация.
Ще може много команди да се зададът към модула едновременно и много отговори да се предадът.

Би ли разказал ако си правил някой интересен модулен проект на C++ как си го структурирал
« Последна редакция: Jan 16, 2011, 01:33 от rcbandit »
Активен