Pull to refresh

Windows-приложения в веб-браузерах пользователей. Свое облако с блэк-джеком и т.д

Reading time 4 min
Views 30K

Идея запускать приложения не на компьютере пользователя, а на удаленном сервере, и транслировать изображение пользователю по сети – не нова, и давно «витает в воздухе». Согласитесь, идея хорошая: ведь для установки любого нового ПО на свой компьютер необходимо разобраться с политикой лицензирования (кому это актуально), найти дистрибутив (желательно, без вредоносного ПО внутри), установить и настроить ПО — иногда просто руки опускаются. Кроме того, подход с трансляцией ПО снимает необходимость в своем производительном «железе», что становится актуальным в свете ежегодного роста продаж планшетных компьютеров и смартфонов. Да и интернет есть повсюду в мегаполисах: слушать музыку и смотреть кино онлайн, в конце концов, все уже давно привыкли.

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

Давайте поподробнее


С моей стороны будет, наверное, не совсем честным не упомянуть про вполне себе существующие, и даже неплохо себя зарекомендовавшие Citrix XenApp и Microsoft App-V. Оба продукта неплохо справляются со своей задачей в крупных организациях, но вот беда: оба решения малопригодны для публичного предоставления сервиса (то есть, для сети Интернет). Виной тому технические особенности, ведь эти системы изначально проектировались для интеграции заказчику. Причем речь идет в первую очередь о крупном бизнесе, так как среднему и малому бизнесу такие системы не по карману. Да и клиентское ПО надо ставить на пользовательские устройства, разбираться, настраивать. На практике оказывается, что не для любых устройств есть клиенты (я про планшеты. Смартфоны и вовсе не поддерживаются), несмотря на заверения дистрибьюторов. Стоит ли говорить, что попытки построения публичного сервиса на базе данных продуктов ничем хорошим не заканчивались, насколько мне известно.

А почему бы не сделать систему, способную транслировать Windows-приложения именно для глобальной сети, подумали мы?

Говоря про Windows-приложения, мы имеем в виду любое программное обеспечение, способное функционировать под управлением операционной системы Microsoft Windows. Почему взяли фокус именно на Windows-приложения? Все очень просто: Windows-приложения – это приложения для бизнеса, для работы, для учебы, приложения, которыми пользуются (и, что немаловажно, умеют пользоваться) миллиарды людей по всему миру. Количество приложений уже разработанных под Microsoft Windows, полагаю, исчисляется миллионами, что представляет собой огромный неисчерпаемый функционал, который было бы, на мой взгляд, здорово аккумулировать в одном месте.

В качестве главного критерия системы была выбрана простота понимания для конечного пользователя, чтобы даже моя мама, привыкшая работать с уже установленным и настроенным ПО на своем ноутбуке не самой последней модели, легко разобралась.

Еще одним важным критерием стало желание поддерживать различные типы современных устройств (персональные компьютеры под управлением различных OS, планшеты, мобильные устройства, современные телевизоры, поддерживающие технологию smart TV и другие). Решение напрашивалось само собой: транслировать windows-приложения надо с удаленного сервера в веб-браузеры конечных пользователей, ну или на веб-страницу, если быть более точным. Вот только как это сделать?

Реализация


Начиналось все со старого Б/У сервера, размещенного в коридоре квартиры, и кодинга до поздней ночи. Что только не пробовали в своем поиске: даже использовать Silverlight в качестве программной платформы для портирования .net-приложений пользователю, но ввиду очевидных ограничений по набору возможных к доставке приложений от этого варианта отказались. Сконцентрировались все-таки на трансляции приложений в кроссплатформенную среду и более от этого направления не отходили. По нашему мнению, трансляция отображения работы приложений является на данный момент времени лучшим методом для «доставки» приложений пользователям.

Для реализации системы потребовалось разработать следующий компоненты:
  • сервер доступа web-клиентов – обеспечивает взаимодействие сервера приложений с клиентами;
  • сервер приложений – обеспечивает передачу событий клавиатуры и мыши приложениям, отправку изображения клиенту, изоляцию приложений друг от друга;
  • сервер управления – обеспечивает управление инфраструктурой;
  • файловый сервер – обеспечивает хранения пользовательских данных.

Для реализации сервера доступа web-клиентов выбор пал на SignalR, который способен самостоятельно выбирать оптимальный транспорт в зависимости от условий. В случае, если есть возможность, SignalR использует WebSockets в качестве транспорта, если такой возможности нет (причиной может стать, к примеру, устаревшая версия веб-браузера) — polling, long polling. Добиться оптимальной скорости для комфортной работы пользователя используя polling, long poling нам не удалось, но частичную поддержку для устаревших версий браузеров все-таки обеспечили.

Сервер приложений является ядром и наиболее не простой частью разрабатываемой системы. Передача изображения от запущенного на сервере ПО осуществляется с помощью снятия скрин-шотов и передачей полученных кадров в режиме реального времени. Изображение разбивается на области, и пользователю передаются только изменения для экономии трафика. Изначально планировалось использовать технологию Desktop Duplication API, но так как она может дуплицировать только рабочий стол целиком, а нам нужны окна, то от нее пришлось отказаться. Модуль создания скриншотов в итоге пришлось разрабатывать самостоятельно. Для разработки кодека в качестве «образца для подражания» был принят FreeRDP WebConnect, серверную часть естественно писали сами. Для передачи событий клавиатуры и мыши приложениям имитируются события на стороне сервера с использованием функций send input.
Файловый сервер и сервер управления представляют меньше интереса, по этой причине не будем на них заострять внимание.

На данный момент бета-версия выглядит так:


И немного импрессионизма в Gimp от автора статьи
Only registered users can participate in poll. Log in, please.
Что вы обо всем этом думаете?
65.61% Мне понравилась идея, хочу узнать поподробнее; 353
7.06% Это гениально! Я бы хотел попробовать разместить свою разработку в такое облако; 38
10.78% Я ничего не понял! Но название поста понравилось; 58
16.54% Зачем это нужно? Не вижу преимуществ перед Web-приложениями. 89
538 users voted. 111 users abstained.
Tags:
Hubs:
+13
Comments 40
Comments Comments 40

Articles