Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.27;
Скачать: CL | DM;

Вниз

Межпроцессное взаимодействие, проблемы оптимизиции   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2005.02.27;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.037 c
1-1108254422
Дмитрий В. Белькевич
2005-02-13 03:27
2005.02.27
Глюки system.pas


3-1107010751
Hort
2005-01-29 17:59
2005.02.27
Добавить запись в базу Interbase


1-1108488680
han-bratan
2005-02-15 20:31
2005.02.27
RTTI


14-1107346414
ммари
2005-02-02 15:13
2005.02.27
Сишарп


14-1107888757
mr-jack
2005-02-08 21:52
2005.02.27
траблы траблы и ещё раз траблы....