The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Межпроцессное взаимодействие, !*! 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, вроде бы он заточен под обмен между процессами на одной машине.




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

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