Отправка больших объемов данных из приложения Windows в приложение-службу - PullRequest
2 голосов
/ 15 февраля 2012

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

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

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

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

System Structure

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

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

1 голос
/ 15 февраля 2012

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

...