|
|
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Подскажите, как можно реализовать передачу данных между приложениями, работающими на одном компьютере? Одно приложение передает, второе получает и в ответ подтверждает корректность полученных данных. Среда разработки Delphi 2010 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 17:17 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
TCP, mailslots, messages. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 17:18 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 17:22 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
antoxкак можно реализовать передачу данных между приложениями, работающими на одном компьютере? TCP я тоже рекомендую. Не будет проблем если в будущем понадобится не только "между приложениями, работающими на одном компьютере". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 17:40 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovTCP я тоже рекомендую. Не будет проблем если в будущем понадобится не только "между приложениями, работающими на одном компьютере". А я бы для начала спросил, насколько плотный обмен данными предполагается. Потому как tcp в рамках одного компьютера - чертовски медленная штука по сравнению с альтернативами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 17:47 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
softwarertcp в рамках одного компьютера - чертовски медленная штука по сравнению с альтернативами. На моём ноуте я разгонял обмен до 80 мегабайт в секунду в полном дуплексе. Это, конечно, медленнее диска, но по-моему вполне достаточно для практически любого применения. А из быстрейших альтернатив - только общая память. Или есть что-то ещё?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 17:56 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
wadmanTCP, mailslots, messages. shared memory?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 17:57 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
softwarer...Потому как tcp в рамках одного компьютера - чертовски медленная штука по сравнению с альтернативами. Используем адрес 127.0.0.1 - и сразу же скорость становится сверхсветовой... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 17:57 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
чччДИспользуем адрес 127.0.0.1 - и сразу же скорость становится сверхсветовой... :) Если бы. Тут ещё зависит от операционки - есть ли у неё специальная обработка для этого случая - но сколь помнится, в старых виндах скорость становится ещё хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 18:00 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
OLE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 18:12 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНа моём ноуте я разгонял обмен до 80 мегабайт в секунду в полном дуплексе. Это, конечно, медленнее диска, но по-моему вполне достаточно для практически любого применения. Не для любого. GigE-видеокамеры на сокетах адски тормозят, для них специальные фильтр-драйверы делают. Dimitry Sibiryakov А из быстрейших альтернатив - только общая память. Или есть что-то ещё?.. Pipes. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 18:48 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
пайпы - вечный геморрой. Надоест очень быстро. shared memory - отлично для передачи блоков данных Я в итоге пришел к tcp - потери в скорости по сравнению с пайпами есть, но не критичные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 19:02 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
softwarerDimitry SibiryakovTCP я тоже рекомендую. Не будет проблем если в будущем понадобится не только "между приложениями, работающими на одном компьютере". А я бы для начала спросил, насколько плотный обмен данными предполагается. Потому как tcp в рамках одного компьютера - чертовски медленная штука по сравнению с альтернативами. Сейчас накидал простой тест, "zmq над tcp:" При обмене блоками диной 1 байт - скорость 13 кбайт в секунду, увеличение длины пакета данных до килобайта-двух почти не влияет на время. Получается примерно 6500 синхронных сеансов обмена в секунду, 0,15 миллисекунды на сеанс. Т.е., время получения ответа после короткого запроса - полторы миллисекунды. ...и чуть больше 100 мегабайт/сек при пересылка блоков по 16кБайт к серверу и обратно, последовательно (клиент отправил - ждет ответа, сервер получил - отправил ответ), тут уже время передачи самих данных играет роль. Время первоначального коннекта не учитывалось (тоже, в общем, не особо и велико). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 19:12 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Vizit0rпайпы - вечный геморрой. Надоест очень быстро. Лет 10 как их пользую, пока не надоели. Геморрой знаю только один: они не могут взаимодействовать если процессы запущены от имени разных пользователей. В этом плане tcp лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 19:29 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
чччД, Десктоп? это фишка такая винды, переключение между процессами надо ускорять что бы работало быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 21:40 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисVizit0rпайпы - вечный геморрой. Надоест очень быстро. Лет 10 как их пользую, пока не надоели. Геморрой знаю только один: они не могут взаимодействовать если процессы запущены от имени разных пользователей. В этом плане tcp лучше. ну как бы если сразу со старта использовать асинхронные нормальные пайпы - то 90% отпадет. А я собрал все грабли синхронных пайпов, только года полтора тому перешел на асинхронные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 21:42 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)...переключение между процессами надо ускорять что бы работало быстрее Какое переключение, как именно "ускорять"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 21:44 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
чччДСейчас накидал простой тест, "zmq над tcp:" У ТСР есть то ли параметр, то ли флаг, отправлять пакет по умолчанию или мгновенно. Если по умолчанию, то винда ожидает какое то кол-во миллисекунд (вроде 200 мс), для отправки пакетов одной порцией. Если поствить мгновенно, то пакет отправляется сразу. Поставь мгновенную отправку, будет быстрее шуршать. Где это выставляется не подскажу, лет 5 уже не залазил в ТСР. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 22:01 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
+1 за TCP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 22:48 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
X11, А реализация через Indy ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 03:35 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
antoxX11, А реализация через Indy ?Зачем этого монстра тянуть? Проще разобраться с апи, там пяток функций, чем пытаться заставить хоть как-то работать эту поделку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 04:25 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
AWSVladimir, Если бы 200 миллисекунд стояло, то мой тест показывал бы не лучше 5 сеансов обмена в секунду. Даже 2.5 сеанса в сек. (задержка на обоих сторонах была бы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 04:41 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 08:42 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 08:50 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
чччДkealon(Ruslan)...переключение между процессами надо ускорять что бы работало быстрее Какое переключение, как именно "ускорять"?времени нет искать, вкратце Проблема в следующем - пока процесс не переключится, естественно не будет отработан приём, отсюда и такая низкая скорость при передаче данных. Для качественной реализации такого пинг-понга по идее нужен механизм передачи управления конкретному процессу на уровне ОС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 09:18 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)чччДпропущено... Какое переключение, как именно "ускорять"?времени нет искать, вкратце Проблема в следующем - пока процесс не переключится, естественно не будет отработан приём... У нас снова кооперативная многозадачность? :) PS: по ссылке читать пытался, но недолго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 09:41 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Как бы все давным давно разжевано.... https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa365574(v=vs.85).aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 10:36 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Общая память для интенсивного обмена слабо подходит. Сразу появляются задачи синхронизации и прочего геморроя. Пайпы хороши тем, что идентифицируются текстом, а значит, можно зафиксировать название (чего не получится в случае TCP - какой порт ни выбери, есть шанс, что он занят). Зато TCP отлично масштабируется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 11:30 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Василий №2Общая память для интенсивного обмена слабо подходит. Сразу появляются задачи синхронизации и прочего геморроя. Зависит от. Прелесть общей памяти в том, что синхроинформацию можно передавать вместе с данными и таким образом избавиться от использования "тяжёлых" средств межпроцессной синхронизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 11:35 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Василий №2Общая память для интенсивного обмена слабо подходит. Сразу появляются задачи синхронизации и прочего геморроя. Пайпы хороши тем, что идентифицируются текстом, а значит, можно зафиксировать название (чего не получится в случае TCP - какой порт ни выбери, есть шанс, что он занят). Зато TCP отлично масштабируетсяэто просто более низкоуровневый механизм и соответственно он требует более высокой квалификации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 12:04 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)пока процесс не переключится Сейчас же многоядерки. Процесс начинает обрабатывать сразу как пришел эвент ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 12:11 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
чччДУ нас снова кооперативная многозадачность? :) PS: по ссылке читать пытался, но недолго.фактически да, всё самое быстрое только так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 12:20 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
AWSVladimirkealon(Ruslan)пока процесс не переключится Сейчас же многоядерки. Процесс начинает обрабатывать сразу как пришел эвентдержи карман шире ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 12:20 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
softwarerЗависит от. Прелесть общей памяти в том, что синхроинформацию можно передавать вместе с данными и таким образом избавиться от использования "тяжёлых" средств межпроцессной синхронизации. Может быть. Но натянуть сову модели потока сообщений на глобус общего куска памяти, имхо, тот еще костыль. Если требуемое взаимодействие применимо на общем куске памяти, то конечно, этот вариант будет удобнее всего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 11:19 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Василий №2Но натянуть сову модели потока сообщений на глобус общего куска памяти, имхо, тот еще костыль. Да не сказал бы. Скажем, сходу: кусок памяти делится на две части, сообщения в одну сторону и сообщения в другую. Писатель пишет в свои исходящие по принципу кольцевого буфера, останавливаясь при заполнении. Читатель посылает сообщения о прочитанных кусках, тем самым давая писателю работать дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 11:49 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
softwarer, Как-то не наблюдаю ни одного преимущества такой схемы по сравнению с пайпами. Разве что когда требуется обмен очень большими данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:01 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, я в данном случае отвечаю конкретно Василию - что натянуть нетрудно. Что касается преимуществ - не изучал серьёзно этот вопрос, не было причин. В целом, доведись мне делать что-то подобное, я отделил бы логику от физики, то есть сделал бы внешний интерфейс с моделью обмена данных и подключаемые протоколы, в которых можно было бы повыбирать и поисследовать. В том числе, допустим, tcp по сети и pipes на локале (или как угодно иначе, что покажет лучшие показатели). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:07 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Named Pipes дают примерно такую же скорость, что и tcp. В рамках одной машины. Как-то тестировал, и по tcp как бы и быстрее получалось. С учетом, что "чистые" WinSock я тогда не использовал, а только надстройку в виде ZMQ - tcp совсем хорошо себя показал. Хотя, конечно, мог где-то накосячить при сравнении. :) Но, опять-таки: Василий №2...Пайпы хороши тем, что идентифицируются текстом, а значит, можно зафиксировать название (чего не получится в случае TCP - какой порт ни выбери, есть шанс, что он занят... - т.е., для tcp приходится приложить чуть больше усилий, чтобы протестировать и выбрать для обмена свободный порт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:21 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
softwarerдоведись мне делать что-то подобное, я отделил бы логику от физики, то есть сделал бы внешний интерфейс с моделью обмена данных и подключаемые протоколы, в которых можно было бы повыбирать и поисследовать. В том числе, допустим, tcp по сети и pipes на локалеmsgconnect например так и сделан. указываешь какой канал снизу использовать, mmf или еще что а потом просто шлешь/получаешь сообщения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:24 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
YuRockantoxX11, А реализация через Indy ?Зачем этого монстра тянуть? Проще разобраться с апи, там пяток функций, чем пытаться заставить хоть как-то работать эту поделку. А есть примеры на delphi ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:27 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:32 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:33 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
чччДNamed Pipes дают примерно такую же скорость, что и tcp. В рамках одной машины. Как-то тестировал, и по tcp как бы и быстрее получалось. С учетом, что "чистые" WinSock я тогда не использовал, а только надстройку в виде ZMQ - tcp совсем хорошо себя показал. Хотя, конечно, мог где-то накосячить при сравнении. :) Скорее всего. Я проверял работу пайпов в качестве прокладки между софтом и железом. По сравнению с прямым взаимодействием скорость падала меньше чем на 1%, при том, что софт грузил все процессоры на 90+. Различия с tcp будут проявляться тогда, когда размер транзакции существенно превышает размер пакета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 13:34 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
чччД... Сейчас накидал простой тест, "zmq над tcp:" При обмене блоками диной 1 байт - скорость 13 кбайт в секунду, увеличение длины пакета данных до килобайта-двух почти не влияет на время. Получается примерно 6500 синхронных сеансов обмена в секунду, 0,15 миллисекунды на сеанс. Т.е., время получения ответа после короткого запроса - полторы миллисекунды. ...и чуть больше 100 мегабитМЕГАБАЙТ /сек при пересылка блоков по 16кБайт к серверу и обратно, последовательно (клиент отправил - ждет ответа, сервер получил - отправил ответ), тут уже время передачи самих данных играет роль. Время первоначального коннекта не учитывалось (тоже, в общем, не особо и велико). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 22:31 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
softwarerВасилий №2Но натянуть сову модели потока сообщений на глобус общего куска памяти, имхо, тот еще костыль. Да не сказал бы. Скажем, сходу: кусок памяти делится на две части, сообщения в одну сторону и сообщения в другую. Писатель пишет в свои исходящие по принципу кольцевого буфера, останавливаясь при заполнении. Читатель посылает сообщения о прочитанных кусках, тем самым давая писателю работать дальше. Окей. Сходу: 1. "посылает сообщения о прочитанных кусках" - т.е. сообщения надо как-то идентифицировать. А это счетчик, слежение за инкрементом, предусмотреть овефлоу и т.д. Либо писатель останавливается до тех пор, пока читатель не вычерпает всю очередь, что дает задержки. Либо читателю придется считывать разом, перегонять в очередь внутри себя и ее уже разбирать. Писатель же должен постоянно проверять статус прочитанности, а это таймер. 2. Не забыть про интерлокед функции записи флагов состояния в общую память. Причем это касается как писателя - отметить, что сообщение полностью записано, и его можно читать, так и читателя - послать отметку о прочтении. 3. Пакеты с нефиксированной длиной также добавят жары. В общем, обработав все подводные камни, уже можно обнаружить, что написал половину стека TCP вкупе с транзакционной моделью. Не говорю, что это невозможно, но и не так просто, как кажется на первый взгляд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 10:08 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Василий №2Окей. Сходу: Сходу - по ответу возникает ощущение, что Вы успели забыть, что такое кольцевой буфер. Василий №21. "посылает сообщения о прочитанных кусках" - т.е. сообщения надо как-то идентифицировать. Нисколько. Идентифицировать надо куски - то есть достаточно смещения. В принципе и сообщения-то посылать не обязательно, достаточно доверить читателю сдвигать указатель начала. Но на глаз, думаю, с сообщениями получится лучше, если задуматься о функционале в совокупности. Василий №2Писатель же должен постоянно проверять статус прочитанности, а это таймер. Неверно. "Статус прочитанности" приходит в обратных сообщениях, без всякого таймера. Василий №22. Не забыть про интерлокед функции записи флагов состояния в общую память. Причем это касается как писателя - отметить, что сообщение полностью записано, и его можно читать, так и читателя - послать отметку о прочтении. Cнова неверно. Ими нужно защитить только изменение указателей на начало-конец буфера. Василий №23. Пакеты с нефиксированной длиной также добавят жары. Вообще бред. Прочитайте уже наконец, что такое кольцевой буфер. Единственный неприятный случай - пакеты длиной больше выделенного куска памяти. Но в наш век трудно считать это серьёзным аргументом. Василий №2В общем, обработав все подводные камни, уже можно обнаружить, что написал половину стека TCP А если прочитать, что такое стек TCP, обнаружится, что до его половины ещё сто раз по столько ненужных ужасов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 10:36 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
softwarerСходу - по ответу возникает ощущение, что Вы успели забыть, что такое кольцевой буфер. Ощущение ложное. Пожалуй, я сразу наложил более близкую мне модель организации на описанный механизм, отчего возникло недопонимание. Однако у тебя тоже проблемы с выражением мыслей. авторНисколько. Идентифицировать надо куски - то есть достаточно смещения. В принципе и сообщения-то посылать не обязательно, достаточно доверить читателю сдвигать указатель начала. Но на глаз, думаю, с сообщениями получится лучше, если задуматься о функционале в совокупности. Под "сообщением" в исходном 21153724 очевидно подразумеваются записи в области читатель=>писатель. авторНеверно. "Статус прочитанности" приходит в обратных сообщениях, без всякого таймера. Противоречие с вышеозначенным понятием "сообщения". Если под "сообщением" вдруг начало пониматься что-то другое - то надо учиться выражать свои мысли. Если же имеются в виду оконные сообщения, то такой способ обмена становится полной ерундой, не стоящей обсуждения. Для безопасной организации обмена потребуются два семафора и, скорее всего, по одному треду в каждом приложении, который бы занимался общением с разделяемой памятью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 14:04 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
antoxпередачу данных между приложениями, работающими на одном компьютере? гуглить библиотеку Cromis.IPC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 15:31 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Василий №2, для безопасной организации обмена через общую память потребуется один или два "кольцевых" массива записей с дополнительным булевым полем для каждого элемента. Писатель устанавливает это поле (байт) в не ноль (что есть атомарно на аппаратном уровне), а читатель после прочтения - в ноль. Усё. Семафор не нужен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 17:27 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
kep-koУсё. Семафор не нужен тогда будут нужны бесконечные циклы Код: pascal 1. это называется spinlock и при очень активном обмене это действительно лучше семафоров но только при очень активном ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 18:23 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
поправка, spinlock - это Код: pascal 1. но и с отдачей кванта тоже не вполне комильфо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 18:25 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
kep-ko, вот и я поначалу думал про такую схему. Упомянутый цикл ожидания, в общем-то и есть реализация семафора, а также особо нет смысла иметь флаги для каждого пакета. Зато проблема динамической длины пакетов встает во весь рост. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 19:43 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Василий №2...Зато проблема динамической длины пакетов встает во весь рост. Память для пакета выделяется не в буфере, в буфере - лишь заголовок, "дескриптор". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 20:11 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Для тех, кому нужен Cromis.IPC в версии на 2013 год -- можно скачать тут со всеми исходниками (опенсорс, сайт авторов библиотеки уже давно не работает). Библиотека интересная, сам ей пользовался для асинхронного обмена между приложениями, понравилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 21:13 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
JaDi, Спасибо, утащил. Может на гитхаб кинуть? Лицензия вроде бы позволяет. Вопрос такой: вроде автор писал, что библиотека однонаправленная. Как с этим у неё? Посмотрел, что-то она немного монстроватая :) Прикрепляю простую реализацию ipc на трубах, шлёт нормально в обе стороны, можно её применять для простых случаев пересылки строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 21:38 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
JaDi, чем то напомнио Indy, такая же монструозная пофигень ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 22:45 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Народ, используйте 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. Клиент такой же простой, только вместо Bind() используется Connect, и сперва Send() - потом Recv()... Скорость, масштабируемость, автоматическое восстановление связи при обрыве, атомарность при доставке сообщений, составные сообщения произвольного формата, управляемые очереди, синхронный и асинхронный режим, поддержка кучи протоколов, куча режимов работы сокетов, биндинг из любого ЯП, офигительных размеров комьюнити, мощная поддержка & бесплатность, опенсорс, непрерывное развитие, документация и книги ... Из недостатков: конкретно у меня, .pas - файлы сделаны для неюникодной Delphi, но тут доделать совсем легко, кому нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 00:12 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Василий №2нет смысла иметь флаги для каждого пакета это если максимальная длина очереди только в один пакет или подготовка следующего зависит от результатов обработки предыдущего. В таком случае кошернее слить функционал в один процесс-поток. И о циклах я не говорил, говорил о кольцевом буфере с признаком постановки/завершения обработки каждого следующего пакета. А если уж в буфере нет обработанных то, Arioch , с отдачей кванта тоже вполне комильфо Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 01:19 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 12:47 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
чччДтолько вместо Bind() используется Connect, и сперва Send() - потом Recv()... ну и на фига для локального протокола использовать сетевый TCP-протоколы? конечно вроде в windows 8.1 появилась "упрощенка" и можно надеяться, что ее ZMQ умее тиспользовать, но - зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 12:48 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
AriochчччДтолько вместо Bind() используется Connect, и сперва Send() - потом Recv()... ну и на фига для локального протокола использовать сетевый TCP-протоколы? конечно вроде в windows 8.1 появилась "упрощенка" и можно надеяться, что ее ZMQ умее тиспользовать, но - зачем? Шта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:51 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Cromis есть на гитхабе, но только в 3rd party. Причем есть куча всяких модулей от автора разной степени полезности. Трубы по определению однонаправленные. Любая двунаправленная реализация - это две трубы. В принципе, ничего сложного: первым делом клиент шлет серверу имя своей собственной слушающей трубы, сервер ее открывает - и вот вам дуплекс. Ariochну и на фига для локального протокола использовать сетевый TCP-протоколы? Зато масштабируется хорошо. А если способ обмена - какой-нибудь из стандартных типа упомянутой zeromq, то и переписывание одного из приложений на другую платформу и даже язык пройдет намного легче. Жаль, что реализация только в виде dll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 14:49 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Для ZMQ есть ipc взаимодействие, основанное и на пайпах. В "строке соединения" вместо "tcp://127.0.0.1:5555" указываешь что-нибудь вроде "ipc:///tmp/feeds/0" - и все, внутри одной машины обмен поверх named pipes. А если нужен обмен в рамках одного приложения (между потоками, например) - то префикс протокола "inproc". Очень удобно разрабатывать и отлаживать сетевую архитектуру: меняешь лишь строку коннекта, и трассируешь обмен между потоками, а когда отладил - меняешь протокол с inproc на ipc или tcp или еще на что. Правда, для Windows ipc поверх пайпов в ZMQ только недавно появилось, и не особо пока популярно, ибо не дает никакого преимущества, кроме "экономии" на выделенном порте tcp... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 15:08 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
чччД, Прочитал всю ленту в треде, ну так лучший то вариант какой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 22:12 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
NukerчччД, Прочитал всю ленту в треде, ну так лучший то вариант какой? Ну конечно же Indy, что же еще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2018, 01:38 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2041237]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 291ms |
| total: | 558ms |

| 0 / 0 |
