Протокол для кодирования данных для веб-приложений на базе рабочего стола

Я планирую разработать систему удаленного рабочего стола, состоящую из:

  1. Настольное приложение, которое может захватывать и отображать экран
  2. Сервер, который устанавливает одноранговые соединения, обслуживает методы обхода STUN/TURN NAT для одноранговых узлов.
  3. Веб-приложение (либо апплет Java, либо Silverlight), которое запускается из браузера и позволяет пользователю видеть/управлять удаленным рабочим столом.

Я хочу сказать, какой протокол кодирования лучше всего подходит для этой системы? Я отложил VNC, который является бинарным и недостаточным - мне нужно больше функциональности, т.е. Обход NAT. Он должен легко разрабатываться на C++ для настольных компьютеров и серверов и на Java/.NET для веб-приложений. Я думал о XML через HTTP (S), но мне интересно, как я могу эффективно кодировать двоичные данные, поскольку должен быть передан значительный объем двоичных данных (захваченные изображения рабочего стола, закодированные как bmp/jpgs и т. д.).

Любые подсказки?

Спасибо


person cubesoft    schedule 14.07.2009    source источник


Ответы (1)


Мне кажется, вы смешиваете некоторые понятия. VNC на самом деле делает то, что вы пытаетесь сделать, и единственное, чего ему не хватает, — это NAT Traversal. Но NAT Traversal не является ответственностью ЛЮБОГО протокола (насколько я знаю). Тем не менее, ничто не мешает вам создать NAT Traversal до того, как будут включены соединения VNC.

Использование XML Over HTTP(S) для обхода брандмауэров — просто огромное излишество. Основная проблема с этим подходом заключается в том, что TCP-соединение не подходит для приложений реального времени, таких как передача видео, а данные xml не являются двоичными! Я думаю, что при таком подходе ваше убойное приложение никогда не запустится.

Зачем изобретать велосипед и не использовать RTP/RTCP + Udp Hole Punching? На эту тему есть тонны (нечитаемой) документации, и, насколько мне известно, Java-апплеты могут отправлять/получать пакеты UDP. Единственное, что вам нужно будет реализовать, это кодирование видео/аудио/событий (то, что VNC уже делает, протокол RFB!)

Надеюсь, это поможет.

person Frangossauro    schedule 14.07.2009