Форум: "WinAPI";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
ВнизМежпроцессное взаимодействие, проблемы оптимизиции Найти похожие ветки
← →
kaZaNoVa © (2005-01-12 14:50) [0]Как лучше, производительнее и оптимальнее реализовывать передачу данных от одного процесса к другому?
Условия - выпоняются на одном компьютере, система Windows XP и выше.
И кто какие предпочитает/юзает ))))
Просьба, по возможности, описывать преимущества и недостатки каждого =)
← →
VMcL © (2005-01-12 15:04) [1]>>kaZaNoVa © (12.01.05 14:50)
WM_COPYDATA
SendMessage
PostMessage
MMF
...
"преимущества и недостатки каждого" зависят от конкретной задачи.
← →
Fay © (2005-01-12 15:17) [2]pipes
← →
kaZaNoVa © (2005-01-12 15:28) [3]VMcL © (12.01.05 15:04) [1]
а если локально сокеты заюзать, это будет нормально, или неоптимально?
← →
Игорь Шевченко © (2005-01-12 15:31) [4]
> Как лучше, производительнее и оптимальнее реализовывать
> передачу данных от одного процесса к другому?
LPC
← →
Eraser © (2005-01-12 15:51) [5]kaZaNoVa
а если локально сокеты заюзать, это будет нормально, или неоптимально?
Это предпочтительно, потому что, поверь, раз тебе нужно чтобы программы взаимодействовали внутри одного компа, тебе вскором времени понадобится взаимодействие с другими компами. Используя сокеты тебе надо будет просто поменять IP адрес с 127.0.0.1 на какой тебя интересует и всё- твоё приложение полностью сетевое.
← →
kaZaNoVa © (2005-01-12 15:55) [6]Eraser © (12.01.05 15:51) [5]
точно !!
//я тоже так раз подумал, что с ними можно будет легко разнести программы =)))
Игорь Шевченко © (12.01.05 15:31) [4]
> LPC
а это что такое?
← →
Kerk © (2005-01-12 15:59) [7]kaZaNoVa © (12.01.05 15:55) [6]
> LPC
а это что такое?
Local Procedure Call
← →
kaZaNoVa © (2005-01-12 16:16) [8]Kerk © (12.01.05 15:59) [7]
а как их юзать?
← →
Маг Похмеляйнен (2005-01-12 16:19) [9]>производительнее
именованный file mapping + 2 event-a для синхронизации (event "захватил" + event "изменил").
>оптимальнее
зависит от требований разработчика. Что передаётся, как часто, максимально допустимое время реакции и т.д.
← →
Piter © (2005-01-12 16:47) [10]kaZaNoVa © (12.01.05 15:28) [3]
а если локально сокеты заюзать, это будет нормально, или неоптимально?
это будет очень не оптимально, не говоря уже о том, что TCP/IP протокол установлен не везде
← →
Игорь Шевченко © (2005-01-12 16:49) [11]
> а как их юзать?
Как обычно
← →
Arm79 © (2005-01-12 17:51) [12]Eraser © (12.01.05 15:51) [5]
Как вариант, MSMQ. Можно писать и читать из очередей.
← →
Sumor (2005-01-12 21:44) [13]Всё таки предпочитаю Pipe.
1. Они работают как на локальной машине, так и в сети.
2. работа с нии, почти как с файлами, поддержка security, встроенная функция ожидания информации (WaitForSingleObject). Возможность работы с формализованными сообщениями.
← →
Eraser © (2005-01-12 22:14) [14]Sumor
Истина где-то рядом )) или Pipe или сокеты.
Кстати, Sumor, если у тебя есть хорошие ссылочки на инфу по Pipe"ам скинь на мне на мыло, буду очень благодарен! Давно хочу разобраться в этой теме.
← →
Игорь Шевченко © (2005-01-12 22:59) [15]Eraser © (12.01.05 22:14) [14]
На этом сайте в разделе "Статьи" "Что такое Named Pipes и как с ними бороться"
← →
Eraser © (2005-01-12 23:05) [16]Игорь Шевченко
Спасибо!
← →
naum (2005-01-12 23:17) [17]Мое мнение: 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:41) [18]Ну представьте, что ваше приложение стоит на машине с брандмауэром
На сколько я знаю файрволлы обычно не блокируют соединения на 127.0.0.1. Хотя замечание хорошее, стоит задуматься...
← →
kaZaNoVa © (2005-01-13 00:31) [19]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 порт?
- имхо это небезопасно, лучше делать тогда уж сокеты ...
← →
kaZaNoVa © (2005-01-13 00:32) [20]Eraser © (12.01.05 23:41) [18]
у меня Oupost 2,1,303 не блокирует, пока я в нете, когда отключён, он что-то блокирует .. приходится отключать если что ....
← →
Игорь Шевченко © (2005-01-13 00:51) [21]Мое мнение: Program Files\Borland\Delphi\Demos\IPCDemos\*.*
Уважаемые авторы вопросов - прочитайте, пожалуйста, тексты примеров из каталога Demos, можно несколько раз, все-таки Фрэнк Борланд старался, писал их для вас.
← →
Digitman © (2005-01-13 10:46) [22]
> мало я с этой штукой работал, хотелось бы побольше инфы,
> по возможности с примерами
всевозможные примеры на эту тему есть в MSDN, правда с-шные
← →
naum (2005-01-13 13:31) [23]Так... Причем тут 127.0.0.1?! Если firewall реагирует на само открытие порта, причем ему по барабану все остальное :( IPCDemos надо будет глянуть обязательно. Раньше не натыкался на него. Все-таки по поводу DDE - кто-нибудь делал? И еще... Находил кто-нибудь какие-нибудь косяки/минусы в методе через WM_COPYDATA?
← →
Alex Konshin © (2005-01-13 13:40) [24]По NamedPipe у меня есть пример "MS SQL Alerter".
← →
BlackTr (2005-01-13 15:25) [25]
> Если firewall реагирует на само открытие порта, причем ему
> по барабану все остально
Нормальный firewall реагирует на пакеты...
← →
BlackTr (2005-01-13 15:27) [26]А на те пакеты которые блуждают внутри машины (127.0.0.1), ему глубоко начхать
← →
naum (2005-01-13 20:47) [27]> BlackTr
Пакеты пакетами, но попробуйте. У меня просто есть наглядный пример двухзвенки с использованием sockets - 100пудовое срабатывание брандмауэра WinXP SP2. Нормальный файерволл всегда пасет открытые порты, даже при условии, что ничего через них не гоняется!
>Alex Konshin
А можно его в "студию"?
← →
Sumor (2005-01-13 23:45) [28]Я писал и 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 или протоколы более высокого уровня, благо в дельфях много компонент на этот счёт
← →
Alex Konshin © (2005-01-14 00:04) [29]naum (13.01.05 20:47) [27]
>Alex Konshin
А можно его в "студию"?
Дык качай, кто не дает? Сайт - в анкете.
http://home.earthlink.net/~akonshin/index.htm
← →
naum (2005-01-14 00:08) [30]Вот это дал, Mr. SUMOR! Во-первых спасибо за сей пример работы с DDE, хоть принципы понял. По возможности: есть пример с "бОльшим" кол-вом возможностей? Не подумайте, что я программирую методом Copy-Paste :), просто нигде нормальной документации по DDE не видел, а 2х сторонний обмен у меня не выходит. Как переслать данные от сервера к клиенту? Каким боком нужны DdeServerItem, DdeClientItem? И т.д. и т.п. Буду очень рад небольшому примеру, присланному на мыльце. Особо интересует двусторонний обмен и отлов событий connect / dicsonnect (хотя с ними вроде понятно). Теперь попробую его за вместо извращений с WM_COPYDATA. Во-вторых: по всем остальным пунктам тем или иным макаром согласен :)
← →
naum (2005-01-14 00:11) [31]> Alex Konshin
Сенькс. На сайте бывал и ранее, просто не заметил наверное тогда... Да и не нужно было ) Сейчас скачаю - посмотрю!
← →
Sumor (2005-01-14 19:10) [32]Продолжение 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-17 23:16) [33]Большое спасибо ) Есть еще пара вопросиков: требует ли DDE наличие определенных компонентов в системе? Нормально ли работает с Win95?
← →
Sumor (2005-01-18 00:10) [34]DDE появилось на заре появления Windows, поэтому она присутствует во всех версиях. Более того продукты которые её поддерживали поддерживают и сейчас - например Microsoft Word. Вы можете выполнить любую команду, послав ему DDE:
Service: Winword
Topic: System
DDEClientConv.ExecuteMacro("[FileOpen "c:\doc1.doc"]", false);
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.037 c