Отправка больших объемов данных из приложения windows в приложение service


Я создаю систему с некоторыми возможностями удаленного рабочего стола. Клиент считается каждый компьютер, который совместно использует свой рабочий стол, сервер считается центральным сервером с базой данных, которая получает изображения всех нескольких рабочих столов. На стороне клиента я хотел бы построить два проекта: приложение-службу windows и приложение VCL forms. Каждое клиентское приложение, предположительно, будет работать под другой учетной записью пользователя на компьютере, поэтому может быть несколько клиентов приложения запускаются одновременно, и все они посылают свой образ в эту клиентскую службу, которая ретранслирует их на центральный сервер.

Служба будет отвечать за подключение к серверу, отправку изображения и получение событий мыши/клавиатуры. Приложение, которое работает в фоновом режиме, будет подключаться к этому сервису каким-то образом и передавать скриншоты в сервис. Цель состоит в том, чтобы одна служба работала, в то время как несколько "клиентов" могут подключиться к ней и отправить свои рисунок рабочего стола. Этот сервис будет подключен к" центральному серверу", который получает все эти разные скриншоты от разных"клиентов". Затем изображения будут либо сохранены и зарегистрированы, либо перенаправлены на любую "панель мониторинга", которая может просматривать этот"клиент".

Вопрос заключается в том, каким способом следует подключать клиентские приложения к клиентской службе для отправки изображений? Они будут работать на одном компьютере. Мне понадобятся обе способности, чтобы послать простую команду пакеты, а также поток фрагмента изображения. Я собирался использовать компоненты Indy (TIdTCPServer и т. д.) но я уверен, что должен быть более простой и чистый способ сделать это. Я использую компоненты Indy и в других проектах.

Вот схема общей системы, к которой я стремлюсь - я просто беспокоюсь о частях на крайнем правом и крайнем левом - где приложения подключаются к службе в пределах одного компьютера. Как вы можете видеть, так как есть много слоев, я должен убедиться, что все, что угодно метод(Ы), который я использую, достаточно мощный, чтобы приспособить для потоковой передачи огромные объемы данных изображения.

структура системы

2 2

2 ответа:

Общается между процессами, вы можете использовать Pipe/Mailslots/Socket, я также думаю, что при отправке потокового файла общая память, возможно, самый эффективный способ

Я делал это уже несколько раз, в нескольких различных конфигурациях. Ключом к облегчению для меня было использование RemObjects SDK, который заботился о коммуникационной части. С потоком, который контролирует его состояние, я могу иметь надежное соединение с сервером или службой и передавать все, что угодно, от байта состояния до передачи многих мегабайт данных (рекомендуется использовать небольшие фрагменты для больших данных, чтобы иметь более точный контроль над ошибками и потоком). Теперь у меня есть набор шаблонов высокой надежности, которые я могу развернуть, чтобы сделать новую вариацию довольно легко, и он может быть обновлен с новыми вызовами функций без особых хлопот (первое, что я делаю, это согласовываю версии между клиентом и сервером, чтобы они знали, что они могут поддерживать). Поскольку все это работает на высоком уровне, мой код просто делает "вызовы функций" и никогда не беспокоится о том, какой формат на проводе. Аналогично я могу переключиться с их двоичного формата на стандартный SOAP или другой, не меняя основной логики. Наконец, соединения могут быть локальными, с одной и той же машиной (я использую это для приложений конечных пользователей, разговаривающих с фоновой службой) или с машиной в локальной сети или интернете. Все в одном коде.