Межпроцессное взаимодействие, goodfornothing, 18-Ноя-11, 21:03 [смотреть все]Всем добрый вечер!Недавно впервые столкнулся с задачей межпроцессного взаимодействия. Задача такая: Есть некоторый программный модуль, написанный на С++(Qt). Предполагается, что он должен обеспечивать некоторый набор услуг прикладным процессам, его использующим. При этом заранее не известно, с использованием какого языка программирования будут реализованы эти процессы. Суть в том, что, необходимо реализовать некий универсальный интерфейс обмена информацией между модулем и прикладным ПО, написанном на каком-либо языке (php, java...). Изначально предпологалось использовать для этих целей xml-файлы. Но мне не ясно, по каому принципу должен осуществляться такое взаимодействие. Например, как один процесс будет проинформирован другим процессом о том, что он прекратил запись в файл и можно совершать его чтение... Подскажите пожалуйста, где можно почитать про это? Буду очень рад вашим советам. Может быть, обмен через xml не самый оптимальный вариант. Кстати, критерием оптимальности в данном случае является скорость обмена информацией между процессами. Заранее спасибо!
|
- Межпроцессное взаимодействие, Square, 22:00 , 18-Ноя-11 (1)
- Межпроцессное взаимодействие, goodfornothing, 14:39 , 19-Ноя-11 (2)
> Вы вероятно не захотите воспользоваться готовыми решениями... > Тогда копать по ключевым словам soap, Service-Oriented Architecture. > на ораклах этим занимается шина Oracle ESB, на виндовс - BizTalk Server > на пальцах - все события регистрируются в одном месте, там есть табличка > - от кого сигнал, состояние его, кому передать, и процесс который > постоянно сканирует изменения - когда состояние измениться у кактогото события- он > дергает соответствующий подпроцесс который что-то делает - считывает какието данны едополнительно, > кому-то что-то посылает...Спасибо) Почитав про концепции soap и Service-Oriented Architecture понял, что надо немного переформулировать вопрос. Меня не столько интересует логическая структура файла, при помощи которого осуществляется обмен информацией, сколько сам процесс обмена. SOAP - это логика создания и обработки информации переносимой xml-файлом. Service-Oriented Architecture - это модель, описывающая общие принцы созданий распределенных приложений, имеющих некий универсальный, не зависящий от языка интерфейс. Меня больше интересует вопрос о том, как два приложения, запущенные на ОДНОЙ машине могут обмениваться информацией через xml-файл. Какова логика обмена данными между приложениями через любой файл? Допустим, два приложения знают имя файла, через который ведется обмен. Как они "понимают", когда можно в него писать, когда можно из него считывать..? Каким образом можно максимально быстрый обмен таким способом?
- Межпроцессное взаимодействие, Square, 14:44 , 19-Ноя-11 (3)
- Межпроцессное взаимодействие, goodfornothing, 15:01 , 19-Ноя-11 (4)
>[оверквотинг удален] > начать писать в файл - он делает лок. закончил писать -снял > лок. > другой процесс - проверяет есть ли лок- если есть - на случайный > промежуток вермени откладывает попытку записи... и как только лок снимится- делает > аналогично -ставит лок, пишет, снимает лок. > считывание рабочего файла-делать по дате последней модификации файла. читающий процесс > запоминает время последней модификации (это атрибут файла на уровне файловой системы),и > как только оно поменяется- значит стоит считать какието обновленные данные. > вобще, обмен через файлы - имхо самый медленный. через сокеты -и быстрее > и универсальнее.Ваша мысль мне ясна)Я понимаю, что обмен через файл - штука сама по себе медленная, но файл универсален. Я достаточно хорошо знаком с C и C++, а о других языках имею весьма поверхностное представление. Все ли они поддерживают сокеты??? Могу ли я быть уверен, что с моим приложением через сокеты сможет общаться приложение, написанное на любом другом языке (широко применяемом? Скажем так, нужно выбрать наиболее быстрый вариант обмена с сохранением универсальности
- Межпроцессное взаимодействие, pavlinux, 22:24 , 19-Ноя-11 (5)
- Межпроцессное взаимодействие, goodfornothing, 20:17 , 20-Ноя-11 (8)
Если бы я свои деньги зарабатывал подобным образом, меня бы давно с работы выгнали)TCP,UDP,SCTP,RTP/IP... На кой??? Обмен данными между процессами на одной машине. Спасибо за ответы!!!
- Межпроцессное взаимодействие, Square, 20:57 , 20-Ноя-11 (9)
- Межпроцессное взаимодействие, goodfornothing, 20:58 , 20-Ноя-11 (10)
>[оверквотинг удален] > А вот смотрите как легко и просто через сеть организуется передача данных: > у каждой службы есть веб-сервер висящий на своем порту (или просто процесс > слушающий свой сокет). > когда нам надо передать ему данные- мы просто вызываем урл, который дергает > нужный CGI-скрипт (засовываем данные в сокет). > никаких лок-файлов, никаких циклических сканирований. Большую часть работы делает система. > собственно когда я говорил о шине - я подразумевал что передача данных > будет происходить по такой логике, но только будет единая точка входа > в эти сервисы - тоесть сокет будет единственный, а уже шина > будет разруливать кому передать нужное сообщение, согласовывать форматы и т.д.Безусловно, идея с сокетами хорошая. Многие языки их поддерживают. Сейчас обдумываю данный вариант)В UNIX есть так называемые unix-сокеты, предназначееные именно для обмена между локальными процессами. Пытаюсь найти что-то подобное в библиотеках Qt
- Межпроцессное взаимодействие, me, 13:32 , 21-Ноя-11 (11)
- Межпроцессное взаимодействие, goodfornothing, 13:40 , 21-Ноя-11 (12)
>> Безусловно, идея с сокетами хорошая. Многие языки их поддерживают. Сейчас обдумываю данный >> вариант)В UNIX есть так называемые unix-сокеты, предназначееные именно для обмена между >> локальными процессами. Пытаюсь найти что-то подобное в библиотеках Qt > в qt dbus есть, но я-бы делал через tcp scoket -- проще. Tcp для моих целей обладает избыточностью (ненужными заголовками). Наткнулся на класс QLocalSocket, вроде бы он заточен под обмен между процессами на одной машине.
|