![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Межпроцессное взаимодействие, проблемы оптимизиции
kaZaNoVa © (2005-01-12 14:50:00)Как лучше, производительнее и оптимальнее реализовывать передачу данных от одного процесса к другому?
Условия - выпоняются на одном компьютере, система Windows XP и выше.
И кто какие предпочитает/юзает ))))
Просьба, по возможности, описывать преимущества и недостатки каждого =)
Sumor (2005-01-18 00:10:00) [1]DDE появилось на заре появления Windows, поэтому она присутствует во всех версиях. Более того продукты которые её поддерживали поддерживают и сейчас - например Microsoft Word. Вы можете выполнить любую команду, послав ему DDE:
Service: Winword
Topic: System
DDEClientConv.ExecuteMacro('[FileOpen "c:\doc1.doc"]', false);
naum (2005-01-17 23:16:00) [2]Большое спасибо ) Есть еще пара вопросиков: требует ли DDE наличие определенных компонентов в системе? Нормально ли работает с Win95?
Sumor (2005-01-14 19:10:00) [3]Продолжение DDE, раз такое дело...
Если сервер DDE не запущен, то запускается приложение указанное в параметре ServiceApplication и делается попытка соединения ещё раз.
DDEItem нужны как раз для обмена информацией.
На сервер дополнительно кидается DDEServerItem. Указывается DDEServer и Name.
Всё теперь у сервера можно будет спросить или записать информацию, записанную в свойство Text (Lines) этого итема.
Для чтения на клиенте после соединения вызывается методRequestData('Item1')и получаете свойство Text c серверного DDEItem
Для записи значения с клиента вызывается метод
PokeData('Item1','Привет')
и текст записывается на сервер
Соответствено на сервере просто надо держать заполненный Item c ответом на клиентский вопрос. Itemов может быть много. Есть событие отлавливливающее момент изменения Item (когда клиент его меняет)
Клиентские Itemы нужны для автоматической синхронизации с серверным Itemом. По идее сервер, если его итем изменился должен автоматически изменить и клиентский итем.
Удачи.
naum (2005-01-14 00:11:00) [4]> Alex Konshin
Сенькс. На сайте бывал и ранее, просто не заметил наверное тогда... Да и не нужно было ) Сейчас скачаю - посмотрю!
naum (2005-01-14 00:08:00) [5]Вот это дал, Mr. SUMOR! Во-первых спасибо за сей пример работы с DDE, хоть принципы понял. По возможности: есть пример с "бОльшим" кол-вом возможностей? Не подумайте, что я программирую методом Copy-Paste :), просто нигде нормальной документации по DDE не видел, а 2х сторонний обмен у меня не выходит. Как переслать данные от сервера к клиенту? Каким боком нужны DdeServerItem, DdeClientItem? И т.д. и т.п. Буду очень рад небольшому примеру, присланному на мыльце. Особо интересует двусторонний обмен и отлов событий connect / dicsonnect (хотя с ними вроде понятно). Теперь попробую его за вместо извращений с WM_COPYDATA. Во-вторых: по всем остальным пунктам тем или иным макаром согласен :)
Alex Konshin (2005-01-14 00:04:00) [6]naum (13.01.05 20:47) [27]
>Alex Konshin
А можно его в "студию"?
Дык качай, кто не дает? Сайт - в анкете.
http://home.earthlink.net/~akonshin/index.htm
Sumor (2005-01-13 23:45:00) [7]Я писал и DDE, и сокеты, и pipe, и mailslot
Всё зависит от конкретной задачи.
DDE:
простейший вариант: на сервер кидаем TDdeServConv. Заполняем Name - это будет Topic. Дальше обработчик ExecuteMacro будет получать от нас сообщения.
На клиенте: кидаем TDdeClientConv. Записываем в Service - имя exe-модуля сервера (без расширения), в Topic записываем Name компоненты с сервера. ConnectMode в ddeManual.
Всё. Теперь с клиента:
DDeClientConv1.OpenLink;
DDeClientConv1.ExecuteMacroLines(S, false);
DDeClientConv1.CloseLink;
И содержимое S дойдёт до сервера.
Pipe: Они работают по сети при установленной сети от Майкрософта, при этом это может быть не только IP, но и IPX и NetBEUI. Пайпы не проверял, но сообщения от maillslot дублируются по всем установленным протоколам.
Соответственно сокеты - только IP
Mailslot удобны когда нужна массовая рассылка клиентам и наоборот, когда все клиенты пишут только в один сервер.
FileMapping - клиент и сервер на одной машине
Итог: локальная машина: DDE, Pipe, FileMapping
локальная сеть (скажем так, доверенная) Pipe, MailSlot, Sockets
глобальная сеть, или не доверенная: Sockets или протоколы более высокого уровня, благо в дельфях много компонент на этот счёт
naum (2005-01-13 20:47:00) [8]> BlackTr
Пакеты пакетами, но попробуйте. У меня просто есть наглядный пример двухзвенки с использованием sockets - 100пудовое срабатывание брандмауэра WinXP SP2. Нормальный файерволл всегда пасет открытые порты, даже при условии, что ничего через них не гоняется!
>Alex Konshin
А можно его в "студию"?
BlackTr (2005-01-13 15:27:00) [9]А на те пакеты которые блуждают внутри машины (127.0.0.1), ему глубоко начхать
BlackTr (2005-01-13 15:25:00) [10]
> Если firewall реагирует на само открытие порта, причем ему
> по барабану все остально
Нормальный firewall реагирует на пакеты...
Alex Konshin (2005-01-13 13:40:00) [11]По NamedPipe у меня есть пример "MS SQL Alerter".
naum (2005-01-13 13:31:00) [12]Так... Причем тут 127.0.0.1?! Если firewall реагирует на само открытие порта, причем ему по барабану все остальное :( IPCDemos надо будет глянуть обязательно. Раньше не натыкался на него. Все-таки по поводу DDE - кто-нибудь делал? И еще... Находил кто-нибудь какие-нибудь косяки/минусы в методе через WM_COPYDATA?
Digitman (2005-01-13 10:46:00) [13]
> мало я с этой штукой работал, хотелось бы побольше инфы,
> по возможности с примерами
всевозможные примеры на эту тему есть в MSDN, правда с-шные
Игорь Шевченко (2005-01-13 00:51:00) [14]Мое мнение: Program Files\Borland\Delphi\Demos\IPCDemos\*.*
Уважаемые авторы вопросов - прочитайте, пожалуйста, тексты примеров из каталога Demos, можно несколько раз, все-таки Фрэнк Борланд старался, писал их для вас.
kaZaNoVa (2005-01-13 00:32:00) [15]Eraser © (12.01.05 23:41) [18]
у меня Oupost 2,1,303 не блокирует, пока я в нете, когда отключён, он что-то блокирует .. приходится отключать если что ....
kaZaNoVa (2005-01-13 00:31:00) [16]naum (12.01.05 23:17) [17]
> Ну представьте, что ваше приложение стоит на машине с
> брандмауэром, причем оно само не имеет НИКАКОГО
> отношения к Интернету... Запускаете вы один из
> "модулей" и видите страшную таблу (for ex. WinXP SP2)
> с default-выделенной кнопкой БЛОКИРОВАТЬ
да, непредвиденная ситуация ..
точно, глючи обеспечены ..
Sumor (12.01.05 21:44) [13]
>Всё таки предпочитаю Pipe.
> 1. Они работают как на локальной машине, так и в сети.
сокеты тоже :))
а как Pipe по сети работают?
- svchost.exe как обычно коннектится на 135 порт?
- имхо это небезопасно, лучше делать тогда уж сокеты ...
Eraser (2005-01-12 23:41:00) [17]Ну представьте, что ваше приложение стоит на машине с брандмауэром
На сколько я знаю файрволлы обычно не блокируют соединения на 127.0.0.1. Хотя замечание хорошее, стоит задуматься...
naum (2005-01-12 23:17:00) [18]Мое мнение: 1. Сокеты. Хм. Ну представьте, что ваше приложение стоит на машине с брандмауэром, причем оно само не имеет НИКАКОГО отношения к Интернету... Запускаете вы один из "модулей" и видите страшную таблу (for ex. WinXP SP2) с default-выделенной кнопкой БЛОКИРОВАТЬ. У просто, бедного юзера, читающего заявления мелкомягких про попытку бла-бла открыть порт, начинает заползать мысля, что ваше приложение действительно чего не доброе затеяло... Вообщем для широкого распространения вариант просто отпадает!; 2. pipe - ну мало я с этой штукой работал, хотелось бы побольше инфы, по возможности с примерами; 3. MailSlot - намучился я с ним(и)... Есть много минусов, впрочем как и у задумки про FileMapping (одно и тоже по идеи, но автор коммента про FM не упомянул MailSlot'ы); 4. OLE, а еще лучше DDE... Хм. Так и не разобрался, как через DDE делать обмен сообщениями, опять же, у кого есть инфа/примеры - плиз на мыло!; 5. WM_COPYDATA - пока что остановился именно на нем, по многим причинам, не всегда от меня зависящим - посмотрим как пойдет дальше, хотя сам вариант мне не особо нравится... А вообще вопрос подняли интересный :) Сенькс всем за комменты...
Eraser (2005-01-12 23:05:00) [19]Игорь Шевченко
Спасибо!
Игорь Шевченко (2005-01-12 22:59:00) [20]Eraser © (12.01.05 22:14) [14]
На этом сайте в разделе "Статьи" "Что такое Named Pipes и как с ними бороться"