powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Общение между приложениями на одном компьютере
66 сообщений из 66, показаны все 3 страниц
Общение между приложениями на одном компьютере
    #39592889
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, как можно реализовать передачу данных между приложениями, работающими на одном компьютере?
Одно приложение передает, второе получает и в ответ подтверждает корректность полученных данных.

Среда разработки Delphi 2010
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39592890
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TCP, mailslots, messages.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39592895
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39592913
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antoxкак можно реализовать передачу данных между приложениями, работающими на одном компьютере?

TCP я тоже рекомендую. Не будет проблем если в будущем понадобится не только "между
приложениями, работающими на одном компьютере".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39592915
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovTCP я тоже рекомендую. Не будет проблем если в будущем понадобится не только "между приложениями, работающими на одном компьютере".
А я бы для начала спросил, насколько плотный обмен данными предполагается. Потому как tcp в рамках одного компьютера - чертовски медленная штука по сравнению с альтернативами.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39592920
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarertcp в рамках одного компьютера - чертовски медленная штука по сравнению с альтернативами.

На моём ноуте я разгонял обмен до 80 мегабайт в секунду в полном дуплексе. Это, конечно,
медленнее диска, но по-моему вполне достаточно для практически любого применения. А из
быстрейших альтернатив - только общая память. Или есть что-то ещё?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39592921
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanTCP, mailslots, messages.
shared memory?..
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39592922
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer...Потому как tcp в рамках одного компьютера - чертовски медленная штука по сравнению с альтернативами.

Используем адрес 127.0.0.1 - и сразу же скорость становится сверхсветовой... :)
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39592925
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДИспользуем адрес 127.0.0.1 - и сразу же скорость становится сверхсветовой... :)
Если бы. Тут ещё зависит от операционки - есть ли у неё специальная обработка для этого случая - но сколь помнится, в старых виндах скорость становится ещё хуже.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39592933
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OLE
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39592942
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНа моём ноуте я разгонял обмен до 80 мегабайт в секунду в полном дуплексе. Это, конечно, медленнее диска, но по-моему вполне достаточно для практически любого применения.

Не для любого.
GigE-видеокамеры на сокетах адски тормозят, для них специальные фильтр-драйверы делают.

Dimitry Sibiryakov А из быстрейших альтернатив - только общая память. Или есть что-то ещё?.. Pipes.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39592950
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пайпы - вечный геморрой. Надоест очень быстро.

shared memory - отлично для передачи блоков данных

Я в итоге пришел к tcp - потери в скорости по сравнению с пайпами есть, но не критичные.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39592953
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerDimitry SibiryakovTCP я тоже рекомендую. Не будет проблем если в будущем понадобится не только "между приложениями, работающими на одном компьютере".
А я бы для начала спросил, насколько плотный обмен данными предполагается. Потому как tcp в рамках одного компьютера - чертовски медленная штука по сравнению с альтернативами.
Сейчас накидал простой тест, "zmq над tcp:"
При обмене блоками диной 1 байт - скорость 13 кбайт в секунду, увеличение длины пакета данных до килобайта-двух почти не влияет на время.
Получается примерно 6500 синхронных сеансов обмена в секунду, 0,15 миллисекунды на сеанс. Т.е., время получения ответа после короткого запроса - полторы миллисекунды.

...и чуть больше 100 мегабайт/сек при пересылка блоков по 16кБайт к серверу и обратно, последовательно (клиент отправил - ждет ответа, сервер получил - отправил ответ), тут уже время передачи самих данных играет роль.

Время первоначального коннекта не учитывалось (тоже, в общем, не особо и велико).
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39592962
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0rпайпы - вечный геморрой. Надоест очень быстро. Лет 10 как их пользую, пока не надоели.
Геморрой знаю только один: они не могут взаимодействовать если процессы запущены от имени разных пользователей. В этом плане tcp лучше.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593005
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,
Десктоп?

это фишка такая винды, переключение между процессами надо ускорять что бы работало быстрее
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593009
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисVizit0rпайпы - вечный геморрой. Надоест очень быстро. Лет 10 как их пользую, пока не надоели.
Геморрой знаю только один: они не могут взаимодействовать если процессы запущены от имени разных пользователей. В этом плане tcp лучше.

ну как бы если сразу со старта использовать асинхронные нормальные пайпы - то 90% отпадет.
А я собрал все грабли синхронных пайпов, только года полтора тому перешел на асинхронные.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593010
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)...переключение между процессами надо ускорять что бы работало быстрее
Какое переключение, как именно "ускорять"?
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593014
AWSVladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДСейчас накидал простой тест, "zmq над tcp:"


У ТСР есть то ли параметр, то ли флаг, отправлять пакет по умолчанию или мгновенно.
Если по умолчанию, то винда ожидает какое то кол-во миллисекунд (вроде 200 мс), для отправки пакетов одной порцией.
Если поствить мгновенно, то пакет отправляется сразу.

Поставь мгновенную отправку, будет быстрее шуршать.
Где это выставляется не подскажу, лет 5 уже не залазил в ТСР.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593018
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+1 за TCP
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593043
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

А реализация через Indy ?
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593046
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antoxX11,

А реализация через Indy ?Зачем этого монстра тянуть? Проще разобраться с апи, там пяток функций, чем пытаться заставить хоть как-то работать эту поделку.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593047
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AWSVladimir,
Если бы 200 миллисекунд стояло, то мой тест показывал бы не лучше 5 сеансов обмена в секунду. Даже 2.5 сеанса в сек. (задержка на обоих сторонах была бы).
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593089
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593090
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius Алгоритм Нейгла

Угу
Does the ZeroMQ library disable the Nagle algorithm (TCP NODELAY)?

Yes.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593102
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДkealon(Ruslan)...переключение между процессами надо ускорять что бы работало быстрее
Какое переключение, как именно "ускорять"?времени нет искать, вкратце

Проблема в следующем - пока процесс не переключится, естественно не будет отработан приём, отсюда и такая низкая скорость при передаче данных. Для качественной реализации такого пинг-понга по идее нужен механизм передачи управления конкретному процессу на уровне ОС.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593121
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)чччДпропущено...

Какое переключение, как именно "ускорять"?времени нет искать, вкратце

Проблема в следующем - пока процесс не переключится, естественно не будет отработан приём...

У нас снова кооперативная многозадачность? :)

PS: по ссылке читать пытался, но недолго.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593144
Leo Pevzner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как бы все давным давно разжевано....
https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa365574(v=vs.85).aspx
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593199
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Общая память для интенсивного обмена слабо подходит. Сразу появляются задачи синхронизации и прочего геморроя. Пайпы хороши тем, что идентифицируются текстом, а значит, можно зафиксировать название (чего не получится в случае TCP - какой порт ни выбери, есть шанс, что он занят). Зато TCP отлично масштабируется
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593207
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2Общая память для интенсивного обмена слабо подходит. Сразу появляются задачи синхронизации и прочего геморроя.
Зависит от. Прелесть общей памяти в том, что синхроинформацию можно передавать вместе с данными и таким образом избавиться от использования "тяжёлых" средств межпроцессной синхронизации.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593235
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2Общая память для интенсивного обмена слабо подходит. Сразу появляются задачи синхронизации и прочего геморроя. Пайпы хороши тем, что идентифицируются текстом, а значит, можно зафиксировать название (чего не получится в случае TCP - какой порт ни выбери, есть шанс, что он занят). Зато TCP отлично масштабируетсяэто просто более низкоуровневый механизм и соответственно он требует более высокой квалификации
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593244
AWSVladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)пока процесс не переключится
Сейчас же многоядерки.
Процесс начинает обрабатывать сразу как пришел эвент
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593250
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДУ нас снова кооперативная многозадачность? :)

PS: по ссылке читать пытался, но недолго.фактически да, всё самое быстрое только так
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593251
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AWSVladimirkealon(Ruslan)пока процесс не переключится
Сейчас же многоядерки.
Процесс начинает обрабатывать сразу как пришел эвентдержи карман шире
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593787
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerЗависит от. Прелесть общей памяти в том, что синхроинформацию можно передавать вместе с данными и таким образом избавиться от использования "тяжёлых" средств межпроцессной синхронизации.
Может быть. Но натянуть сову модели потока сообщений на глобус общего куска памяти, имхо, тот еще костыль. Если требуемое взаимодействие применимо на общем куске памяти, то конечно, этот вариант будет удобнее всего.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593814
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2Но натянуть сову модели потока сообщений на глобус общего куска памяти, имхо, тот еще костыль.
Да не сказал бы. Скажем, сходу: кусок памяти делится на две части, сообщения в одну сторону и сообщения в другую. Писатель пишет в свои исходящие по принципу кольцевого буфера, останавливаясь при заполнении. Читатель посылает сообщения о прочитанных кусках, тем самым давая писателю работать дальше.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593827
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,
Как-то не наблюдаю ни одного преимущества такой схемы по сравнению с пайпами.
Разве что когда требуется обмен очень большими данными.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593830
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

я в данном случае отвечаю конкретно Василию - что натянуть нетрудно. Что касается преимуществ - не изучал серьёзно этот вопрос, не было причин. В целом, доведись мне делать что-то подобное, я отделил бы логику от физики, то есть сделал бы внешний интерфейс с моделью обмена данных и подключаемые протоколы, в которых можно было бы повыбирать и поисследовать. В том числе, допустим, tcp по сети и pipes на локале (или как угодно иначе, что покажет лучшие показатели).
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593839
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Named Pipes дают примерно такую же скорость, что и tcp. В рамках одной машины.

Как-то тестировал, и по tcp как бы и быстрее получалось. С учетом, что "чистые" WinSock я тогда не использовал, а только надстройку в виде ZMQ - tcp совсем хорошо себя показал.

Хотя, конечно, мог где-то накосячить при сравнении. :)

Но, опять-таки:
Василий №2...Пайпы хороши тем, что идентифицируются текстом, а значит, можно зафиксировать название (чего не получится в случае TCP - какой порт ни выбери, есть шанс, что он занят... - т.е., для tcp приходится приложить чуть больше усилий, чтобы протестировать и выбрать для обмена свободный порт.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593843
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerдоведись мне делать что-то подобное, я отделил бы логику от физики, то есть сделал бы внешний интерфейс с моделью обмена данных и подключаемые протоколы, в которых можно было бы повыбирать и поисследовать. В том числе, допустим, tcp по сети и pipes на локалеmsgconnect например так и сделан. указываешь какой канал снизу использовать, mmf или еще что а потом просто шлешь/получаешь сообщения
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593849
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockantoxX11,

А реализация через Indy ?Зачем этого монстра тянуть? Проще разобраться с апи, там пяток функций, чем пытаться заставить хоть как-то работать эту поделку.

А есть примеры на delphi ?
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593856
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593858
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox,

и вот тут . Но не на Дельфи. :)
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593914
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДNamed Pipes дают примерно такую же скорость, что и tcp. В рамках одной машины.

Как-то тестировал, и по tcp как бы и быстрее получалось. С учетом, что "чистые" WinSock я тогда не использовал, а только надстройку в виде ZMQ - tcp совсем хорошо себя показал.

Хотя, конечно, мог где-то накосячить при сравнении. :)

Скорее всего.
Я проверял работу пайпов в качестве прокладки между софтом и железом. По сравнению с прямым взаимодействием скорость падала меньше чем на 1%, при том, что софт грузил все процессоры на 90+.

Различия с tcp будут проявляться тогда, когда размер транзакции существенно превышает размер пакета.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39594475
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД...
Сейчас накидал простой тест, "zmq над tcp:"
При обмене блоками диной 1 байт - скорость 13 кбайт в секунду, увеличение длины пакета данных до килобайта-двух почти не влияет на время.
Получается примерно 6500 синхронных сеансов обмена в секунду, 0,15 миллисекунды на сеанс. Т.е., время получения ответа после короткого запроса - полторы миллисекунды.

...и чуть больше 100 мегабитМЕГАБАЙТ /сек при пересылка блоков по 16кБайт к серверу и обратно, последовательно (клиент отправил - ждет ответа, сервер получил - отправил ответ), тут уже время передачи самих данных играет роль.

Время первоначального коннекта не учитывалось (тоже, в общем, не особо и велико).
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39594657
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerВасилий №2Но натянуть сову модели потока сообщений на глобус общего куска памяти, имхо, тот еще костыль.
Да не сказал бы. Скажем, сходу: кусок памяти делится на две части, сообщения в одну сторону и сообщения в другую. Писатель пишет в свои исходящие по принципу кольцевого буфера, останавливаясь при заполнении. Читатель посылает сообщения о прочитанных кусках, тем самым давая писателю работать дальше.
Окей. Сходу:
1. "посылает сообщения о прочитанных кусках" - т.е. сообщения надо как-то идентифицировать. А это счетчик, слежение за инкрементом, предусмотреть овефлоу и т.д. Либо писатель останавливается до тех пор, пока читатель не вычерпает всю очередь, что дает задержки. Либо читателю придется считывать разом, перегонять в очередь внутри себя и ее уже разбирать. Писатель же должен постоянно проверять статус прочитанности, а это таймер.
2. Не забыть про интерлокед функции записи флагов состояния в общую память. Причем это касается как писателя - отметить, что сообщение полностью записано, и его можно читать, так и читателя - послать отметку о прочтении.
3. Пакеты с нефиксированной длиной также добавят жары.

В общем, обработав все подводные камни, уже можно обнаружить, что написал половину стека TCP вкупе с транзакционной моделью. Не говорю, что это невозможно, но и не так просто, как кажется на первый взгляд.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39594700
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2Окей. Сходу:
Сходу - по ответу возникает ощущение, что Вы успели забыть, что такое кольцевой буфер.

Василий №21. "посылает сообщения о прочитанных кусках" - т.е. сообщения надо как-то идентифицировать.
Нисколько. Идентифицировать надо куски - то есть достаточно смещения. В принципе и сообщения-то посылать не обязательно, достаточно доверить читателю сдвигать указатель начала. Но на глаз, думаю, с сообщениями получится лучше, если задуматься о функционале в совокупности.

Василий №2Писатель же должен постоянно проверять статус прочитанности, а это таймер.
Неверно. "Статус прочитанности" приходит в обратных сообщениях, без всякого таймера.

Василий №22. Не забыть про интерлокед функции записи флагов состояния в общую память. Причем это касается как писателя - отметить, что сообщение полностью записано, и его можно читать, так и читателя - послать отметку о прочтении.
Cнова неверно. Ими нужно защитить только изменение указателей на начало-конец буфера.

Василий №23. Пакеты с нефиксированной длиной также добавят жары.
Вообще бред. Прочитайте уже наконец, что такое кольцевой буфер. Единственный неприятный случай - пакеты длиной больше выделенного куска памяти. Но в наш век трудно считать это серьёзным аргументом.

Василий №2В общем, обработав все подводные камни, уже можно обнаружить, что написал половину стека TCP
А если прочитать, что такое стек TCP, обнаружится, что до его половины ещё сто раз по столько ненужных ужасов.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39594903
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerСходу - по ответу возникает ощущение, что Вы успели забыть, что такое кольцевой буфер.
Ощущение ложное. Пожалуй, я сразу наложил более близкую мне модель организации на описанный механизм, отчего возникло недопонимание. Однако у тебя тоже проблемы с выражением мыслей.
авторНисколько. Идентифицировать надо куски - то есть достаточно смещения. В принципе и сообщения-то посылать не обязательно, достаточно доверить читателю сдвигать указатель начала. Но на глаз, думаю, с сообщениями получится лучше, если задуматься о функционале в совокупности.
Под "сообщением" в исходном 21153724 очевидно подразумеваются записи в области читатель=>писатель.
авторНеверно. "Статус прочитанности" приходит в обратных сообщениях, без всякого таймера.
Противоречие с вышеозначенным понятием "сообщения". Если под "сообщением" вдруг начало пониматься что-то другое - то надо учиться выражать свои мысли. Если же имеются в виду оконные сообщения, то такой способ обмена становится полной ерундой, не стоящей обсуждения.

Для безопасной организации обмена потребуются два семафора и, скорее всего, по одному треду в каждом приложении, который бы занимался общением с разделяемой памятью.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595000
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antoxпередачу данных между приложениями, работающими на одном компьютере?

гуглить библиотеку Cromis.IPC
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595112
kep-ko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Василий №2, для безопасной организации обмена через общую память потребуется один или два "кольцевых" массива записей с дополнительным булевым полем для каждого элемента. Писатель устанавливает это поле (байт) в не ноль (что есть атомарно на аппаратном уровне), а читатель после прочтения - в ноль. Усё. Семафор не нужен
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595168
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kep-koУсё. Семафор не нужен

тогда будут нужны бесконечные циклы

Код: pascal
1.
 while not NextQueueFrame^.DataReady do Sleep(0);



это называется spinlock и при очень активном обмене это действительно лучше семафоров

но только при очень активном
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595170
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправка, spinlock - это
Код: pascal
1.
 while not NextQueueFrame^.DataReady do ;



но и с отдачей кванта тоже не вполне комильфо
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595212
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kep-ko, вот и я поначалу думал про такую схему. Упомянутый цикл ожидания, в общем-то и есть реализация семафора, а также особо нет смысла иметь флаги для каждого пакета. Зато проблема динамической длины пакетов встает во весь рост.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595225
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2...Зато проблема динамической длины пакетов встает во весь рост.
Память для пакета выделяется не в буфере, в буфере - лишь заголовок, "дескриптор".
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595241
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для тех, кому нужен Cromis.IPC в версии на 2013 год -- можно скачать тут со всеми исходниками (опенсорс, сайт авторов библиотеки уже давно не работает). Библиотека интересная, сам ей пользовался для асинхронного обмена между приложениями, понравилось.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595252
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,

Спасибо, утащил. Может на гитхаб кинуть? Лицензия вроде бы позволяет. Вопрос такой: вроде автор писал, что библиотека однонаправленная. Как с этим у неё?

Посмотрел, что-то она немного монстроватая :) Прикрепляю простую реализацию ipc на трубах, шлёт нормально в обе стороны, можно её применять для простых случаев пересылки строк.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595273
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,

чем то напомнио Indy, такая же монструозная пофигень
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595290
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, используйте zmq . Одна dll и один или два библиотечных .pas-файлов.

Вот, простой эхо-сервер, читает сообщения и отправляет их обратно:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
program zmqServer;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows,
  zmq_classes in '..\..\GuardantLib_New\libZMQ\zmq_classes.pas', // "Объектная" оболочка библиотеки
  zmq_h in '..\..\GuardantLib_New\libZMQ\zmq_h.pas'; // Файл биндинга к libZMQ

const
  c_Addr = 'tcp://*:5555'; // Адрес для приема: принимаем от всех (или 127.0.0.1 для внутримашинной связи) на порт 5555
procedure DoIt;
var
  fCtx: TzmqContext;   // ZeroMQ контекст
  fSktRep: TzmqSocket; // Сокет типа REPORT
  fMsg: TzmqMessage;   // Сообщение
begin
  fCtx := TzmqContext.Create; // Создание контекста
  try
    fSktRep := fCtx.Socket(stRep); // Создание сокета
    fSktRep.Bind(c_Addr);          //  Запуск сокета на прослушку
    fMsg := nil;
    while fSktRep.Recv(fMsg) >= 0 do  // В цикле чтение сообщения
      fSktRep.Send(fMsg)              // ... и отправка его обратно
  finally
    fCtx.Free;
  end;
end;
begin
  doIt;
  Readln;
end.


Клиент такой же простой, только вместо Bind() используется Connect, и сперва Send() - потом Recv()...

Скорость, масштабируемость, автоматическое восстановление связи при обрыве, атомарность при доставке сообщений, составные сообщения произвольного формата, управляемые очереди, синхронный и асинхронный режим, поддержка кучи протоколов, куча режимов работы сокетов, биндинг из любого ЯП, офигительных размеров комьюнити, мощная поддержка & бесплатность, опенсорс, непрерывное развитие, документация и книги ...

Из недостатков: конкретно у меня, .pas - файлы сделаны для неюникодной Delphi, но тут доделать совсем легко, кому нужно.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595296
kep-ko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Василий №2нет смысла иметь флаги для каждого пакета это если максимальная длина очереди только в один пакет или подготовка следующего зависит от результатов обработки предыдущего. В таком случае кошернее слить функционал в один процесс-поток.

И о циклах я не говорил, говорил о кольцевом буфере с признаком постановки/завершения обработки каждого следующего пакета.

А если уж в буфере нет обработанных то, Arioch , с отдачей кванта тоже вполне комильфо
Код: pascal
1.
if not SwitchToThread() then Sleep(1);
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595538
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,

на вкладке NEwest - последний вопрос от 2016 года и все остальны - 2014 и раньше.
завязал с программированием, вероятно.
https://stackoverflow.com/users/118765/runner

А тут, что любопытно, он указан автором коммерческих библиотек https://torry.net/authorsmore.php?id=7711

На гитхабе тоже встерчается, типа https://github.com/digitalfrontiersireland/digital-frontiers-ireland/tree/master/packages/3rdparty/Cromis

makhaonавтор писал, что библиотека однонаправленная

Ну а как иначе, это же обертка поверх Named Pipes, что они умеют - то и на высоком уровне умеет библиотека. А чего в принципе в трубах нет - того и там нет.
https://stackoverflow.com/a/9748495
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595540
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДтолько вместо Bind() используется Connect, и сперва Send() - потом Recv()...

ну и на фига для локального протокола использовать сетевый TCP-протоколы?

конечно вроде в windows 8.1 появилась "упрощенка" и можно надеяться, что ее ZMQ умее тиспользовать, но - зачем?
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595602
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochчччДтолько вместо Bind() используется Connect, и сперва Send() - потом Recv()...

ну и на фига для локального протокола использовать сетевый TCP-протоколы?

конечно вроде в windows 8.1 появилась "упрощенка" и можно надеяться, что ее ZMQ умее тиспользовать, но - зачем?
Шта?
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595654
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cromis есть на гитхабе, но только в 3rd party. Причем есть куча всяких модулей от автора разной степени полезности.

Трубы по определению однонаправленные. Любая двунаправленная реализация - это две трубы. В принципе, ничего сложного: первым делом клиент шлет серверу имя своей собственной слушающей трубы, сервер ее открывает - и вот вам дуплекс.

Ariochну и на фига для локального протокола использовать сетевый TCP-протоколы?
Зато масштабируется хорошо. А если способ обмена - какой-нибудь из стандартных типа упомянутой zeromq, то и переписывание одного из приложений на другую платформу и даже язык пройдет намного легче. Жаль, что реализация только в виде dll.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595673
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для ZMQ есть ipc взаимодействие, основанное и на пайпах.
В "строке соединения" вместо "tcp://127.0.0.1:5555" указываешь что-нибудь вроде "ipc:///tmp/feeds/0" - и все, внутри одной машины обмен поверх named pipes.
А если нужен обмен в рамках одного приложения (между потоками, например) - то префикс протокола "inproc". Очень удобно разрабатывать и отлаживать сетевую архитектуру: меняешь лишь строку коннекта, и трассируешь обмен между потоками, а когда отладил - меняешь протокол с inproc на ipc или tcp или еще на что.

Правда, для Windows ipc поверх пайпов в ZMQ только недавно появилось, и не особо пока популярно, ибо не дает никакого преимущества, кроме "экономии" на выделенном порте tcp...
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39600839
Nuker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чччД,

Прочитал всю ленту в треде, ну так лучший то вариант какой?
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39600880
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NukerчччД,

Прочитал всю ленту в треде, ну так лучший то вариант какой?
Ну конечно же Indy, что же еще
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39601009
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nuker,

Муки выбора за тобой
...
Рейтинг: 0 / 0
66 сообщений из 66, показаны все 3 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Общение между приложениями на одном компьютере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]