The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Межпроцессное взаимодействие"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Процессы, Треды, RPC)
Изначальное сообщение [ Отслеживать ]

"Межпроцессное взаимодействие"  +/
Сообщение от goodfornothing email(ok) on 18-Ноя-11, 21:03 
Всем добрый вечер!

Недавно впервые столкнулся с задачей межпроцессного взаимодействия. Задача такая:

Есть некоторый программный модуль, написанный на С++(Qt). Предполагается, что он должен обеспечивать некоторый набор услуг прикладным процессам, его использующим. При этом заранее не известно, с использованием какого языка программирования будут реализованы эти процессы. Суть в том, что, необходимо реализовать некий универсальный интерфейс обмена информацией между модулем и прикладным ПО, написанном на каком-либо языке (php, java...). Изначально предпологалось использовать для этих целей xml-файлы. Но мне не ясно, по каому принципу должен осуществляться такое взаимодействие. Например, как один процесс будет проинформирован другим процессом о том, что он прекратил запись в файл и можно совершать его чтение... Подскажите пожалуйста, где можно почитать про это? Буду очень рад вашим советам. Может быть, обмен через xml не самый оптимальный вариант. Кстати, критерием оптимальности в данном случае является скорость обмена информацией между процессами.

Заранее спасибо!

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Межпроцессное взаимодействие"  +/
Сообщение от Square (ok) on 18-Ноя-11, 22:00 
>[оверквотинг удален]
> Суть в том, что, необходимо реализовать некий универсальный интерфейс обмена информацией
> между модулем и прикладным ПО, написанном на каком-либо языке (php, java...).
> Изначально предпологалось использовать для этих целей xml-файлы. Но мне не ясно,
> по каому принципу должен осуществляться такое взаимодействие. Например, как один процесс
> будет проинформирован другим процессом о том, что он прекратил запись в
> файл и можно совершать его чтение... Подскажите пожалуйста, где можно почитать
> про это? Буду очень рад вашим советам. Может быть, обмен через
> xml не самый оптимальный вариант. Кстати, критерием оптимальности в данном случае
> является скорость обмена информацией между процессами.
> Заранее спасибо!

Вы вероятно не захотите воспользоваться готовыми решениями...
Тогда копать по ключевым словам soap, Service-Oriented Architecture.
на ораклах этим занимается шина Oracle ESB, на виндовс - BizTalk Server

на пальцах - все события регистрируются в одном месте, там есть табличка - от кого сигнал, состояние его, кому передать, и процесс который постоянно сканирует изменения - когда состояние измениться у кактогото события- он дергает соответствующий подпроцесс который что-то делает - считывает какието данны едополнительно, кому-то что-то посылает...

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Межпроцессное взаимодействие"  +/
Сообщение от goodfornothing email(ok) on 19-Ноя-11, 14:39 
> Вы вероятно не захотите воспользоваться готовыми решениями...
> Тогда копать по ключевым словам soap, Service-Oriented Architecture.
> на ораклах этим занимается шина Oracle ESB, на виндовс - BizTalk Server
> на пальцах - все события регистрируются в одном месте, там есть табличка
> - от кого сигнал, состояние его, кому передать, и процесс который
> постоянно сканирует изменения - когда состояние измениться у кактогото события- он
> дергает соответствующий подпроцесс который что-то делает - считывает какието данны едополнительно,
> кому-то что-то посылает...

Спасибо) Почитав про концепции soap и Service-Oriented Architecture понял, что надо немного переформулировать вопрос. Меня не столько интересует логическая структура файла, при помощи которого осуществляется обмен информацией, сколько сам процесс обмена. SOAP - это логика создания и обработки информации переносимой xml-файлом. Service-Oriented Architecture - это модель, описывающая общие принцы созданий распределенных приложений, имеющих некий универсальный, не зависящий от языка интерфейс. Меня больше интересует вопрос о том, как два приложения, запущенные на ОДНОЙ машине могут обмениваться информацией через xml-файл. Какова логика обмена данными между приложениями через любой файл? Допустим, два приложения знают имя файла, через который ведется обмен. Как они "понимают", когда можно в него писать, когда можно из него считывать..? Каким образом можно максимально быстрый обмен таким способом?

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Межпроцессное взаимодействие"  +/
Сообщение от Square (ok) on 19-Ноя-11, 14:44 
>[оверквотинг удален]
> переформулировать вопрос. Меня не столько интересует логическая структура файла, при помощи
> которого осуществляется обмен информацией, сколько сам процесс обмена. SOAP - это
> логика создания и обработки информации переносимой xml-файлом. Service-Oriented Architecture
> - это модель, описывающая общие принцы созданий распределенных приложений, имеющих некий
> универсальный, не зависящий от языка интерфейс. Меня больше интересует вопрос о
> том, как два приложения, запущенные на ОДНОЙ машине могут обмениваться информацией
> через xml-файл. Какова логика обмена данными между приложениями через любой файл?
> Допустим, два приложения знают имя файла, через который ведется обмен. Как
> они "понимают", когда можно в него писать, когда можно из него
> считывать..? Каким образом можно максимально быстрый обмен таким способом?

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

считывание рабочего файла-делать по дате последней модификации файла. читающий процесс запоминает время последней модификации (это атрибут файла на уровне файловой системы),и как только оно поменяется- значит стоит считать какието обновленные данные.

вобще, обмен через файлы - имхо самый медленный. через сокеты -и быстрее и универсальнее.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Межпроцессное взаимодействие"  +/
Сообщение от goodfornothing email(ok) on 19-Ноя-11, 15:01 
>[оверквотинг удален]
> начать писать в файл - он делает лок. закончил писать -снял
> лок.
> другой процесс - проверяет есть ли лок- если есть - на случайный
> промежуток вермени откладывает попытку записи... и как только лок снимится- делает
> аналогично -ставит лок, пишет, снимает лок.
> считывание рабочего файла-делать по дате последней модификации файла. читающий процесс
> запоминает время последней модификации (это атрибут файла на уровне файловой системы),и
> как только оно поменяется- значит стоит считать какието обновленные данные.
> вобще, обмен через файлы - имхо самый медленный. через сокеты -и быстрее
> и универсальнее.

Ваша мысль мне ясна)Я понимаю, что обмен через файл - штука сама по себе медленная, но файл универсален. Я достаточно хорошо знаком с C и C++, а о других языках имею весьма поверхностное представление. Все ли они поддерживают сокеты??? Могу ли я быть уверен, что с моим приложением через сокеты сможет общаться приложение, написанное на любом другом языке (широко применяемом? Скажем так, нужно выбрать наиболее быстрый вариант обмена с сохранением универсальности

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Межпроцессное взаимодействие"  +1 +/
Сообщение от pavlinux (ok) on 19-Ноя-11, 22:31 
> Скажем так, нужно выбрать наиболее быстрый вариант обмена с сохранением универсальности

Сначала делаешь на файлах, полгода получаешь зарплату.
Потом, случайно так, выясняется что это тормоза...
Придумываешь делать на сигналах иль пайпах,... ещё пол года получаешь зарплату
Когда чувствуешь, что начальство уже начинает сомневаться... , ты победоносно,
за пару недель делаешь на TCP/IP ...

Пох...ю на проблему, годовая зарплата освоена. :)


Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Межпроцессное взаимодействие"  +/
Сообщение от elvenic (??) on 20-Ноя-11, 02:09 
>> Скажем так, нужно выбрать наиболее быстрый вариант обмена с сохранением универсальности
> Сначала делаешь на файлах, полгода получаешь зарплату.
> Потом, случайно так, выясняется что это тормоза...
> Придумываешь делать на сигналах иль пайпах,... ещё пол года получаешь зарплату
> Когда чувствуешь, что начальство уже начинает сомневаться... , ты победоносно,
> за пару недель делаешь на TCP/IP ...

Внемлите! Внемлите словам мудрого!

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

5. "Межпроцессное взаимодействие"  +/
Сообщение от pavlinux (ok) on 19-Ноя-11, 22:24 
> Всем добрый вечер!
> Недавно впервые столкнулся с задачей межпроцессного взаимодействия. Задача такая:
> Есть некоторый программный модуль, написанный на С++(Qt). Предполагается, что он должен
> обеспечивать некоторый набор услуг прикладным процессам, его использующим. При этом заранее
> не известно, с использованием какого языка программирования будут реализованы эти процессы.

pipe / shared memory / сигналы  и сюрприз - TCP,UDP,SCTP,RTP/IP :)

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

8. "Межпроцессное взаимодействие"  +/
Сообщение от goodfornothing email(ok) on 20-Ноя-11, 20:17 
Если бы я свои деньги зарабатывал подобным образом, меня бы давно с работы выгнали)

TCP,UDP,SCTP,RTP/IP... На кой??? Обмен данными между процессами на одной машине.

Спасибо за ответы!!!


Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

9. "Межпроцессное взаимодействие"  +/
Сообщение от Square (ok) on 20-Ноя-11, 20:57 
> Если бы я свои деньги зарабатывал подобным образом, меня бы давно с
> работы выгнали)
> TCP,UDP,SCTP,RTP/IP... На кой??? Обмен данными между процессами на одной машине.

А вот смотрите как легко и просто через сеть организуется передача данных:
у каждой службы есть веб-сервер висящий на своем порту (или просто процесс слушающий свой сокет).
когда нам надо передать ему данные- мы просто вызываем урл, который дергает нужный CGI-скрипт (засовываем данные в сокет).
никаких лок-файлов, никаких циклических сканирований. Большую часть работы делает система.
Нужно передать данные- просто передаем их.

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

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Межпроцессное взаимодействие"  +/
Сообщение от goodfornothing email(ok) on 20-Ноя-11, 20:58 
>[оверквотинг удален]
> А вот смотрите как легко и просто через сеть организуется передача данных:
> у каждой службы есть веб-сервер висящий на своем порту (или просто процесс
> слушающий свой сокет).
> когда нам надо передать ему данные- мы просто вызываем урл, который дергает
> нужный CGI-скрипт (засовываем данные в сокет).
> никаких лок-файлов, никаких циклических сканирований. Большую часть работы делает система.
> собственно когда я говорил о шине - я подразумевал что передача данных
> будет происходить по такой логике, но только будет единая точка входа
> в эти сервисы - тоесть сокет будет единственный, а уже шина
> будет разруливать кому передать нужное сообщение, согласовывать форматы и т.д.

Безусловно, идея с сокетами хорошая. Многие языки их поддерживают. Сейчас обдумываю данный вариант)В UNIX есть так называемые unix-сокеты, предназначееные именно для обмена между локальными процессами. Пытаюсь найти что-то подобное в библиотеках Qt


Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Межпроцессное взаимодействие"  +/
Сообщение от me (??) on 21-Ноя-11, 13:32 
> Безусловно, идея с сокетами хорошая. Многие языки их поддерживают. Сейчас обдумываю данный
> вариант)В UNIX есть так называемые unix-сокеты, предназначееные именно для обмена между
> локальными процессами. Пытаюсь найти что-то подобное в библиотеках Qt

в qt dbus есть, но я-бы делал через tcp scoket -- проще.

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Межпроцессное взаимодействие"  +/
Сообщение от goodfornothing email(ok) on 21-Ноя-11, 13:40 
>> Безусловно, идея с сокетами хорошая. Многие языки их поддерживают. Сейчас обдумываю данный
>> вариант)В UNIX есть так называемые unix-сокеты, предназначееные именно для обмена между
>> локальными процессами. Пытаюсь найти что-то подобное в библиотеках Qt
> в qt dbus есть, но я-бы делал через tcp scoket -- проще.

Tcp для моих целей обладает избыточностью (ненужными заголовками). Наткнулся на класс QLocalSocket, вроде бы он заточен под обмен между процессами на одной машине.

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру