powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Общение между приложениями на одном компьютере
16 сообщений из 66, страница 3 из 3
Общение между приложениями на одном компьютере
    #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
16 сообщений из 66, страница 3 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Общение между приложениями на одном компьютере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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