Разница между RDP/службами терминалов и методами потоковой передачи VNC

StackOverflow https://stackoverflow.com/questions/540188

Вопрос

В рамках инструмента поддержки клиентов я хочу предоставить некоторые функции, позволяющие запрашивать просмотр/удаленное управление сеансом рабочего стола.Существует множество способов сделать снимок экрана, а затем передать его в потоковом режиме, но я хочу, в частности, выяснить, почему RDP (Remote Desktop/Terminal Services vs.Опыт VNC настолько разный.Я использую RDP против.VNC только потому, что они, кажется, используют совершенно разные методы для потоковой передачи экрана клиенту.

Если мне пришлось догадываться, RDP, похоже, передает блоки растровой графики (скажем, 100x100 пикселей) для построения полного изображения (что может быть довольно медленным), но, похоже, очень быстро передает клиенту обычные нарисованные фигуры/заливки или рисунок шрифта. .Кажется, что VNC делает огромные снимки экрана, сравнивает предыдущее изображение и передает изменения клиенту.

Я считаю, что RDP — гораздо более качественный и плавный протокол, чем любой другой протокол, так какой же метод он использует для этого?

РЕДАКТИРОВАТЬ. Просто чтобы уточнить, я спрашиваю об этих графических методах конкретно как о методе программирования потокового протокола, а не о том, какой существующий продукт/технологию использовать для решения этого бизнес-требования.

Это было полезно?

Решение

Как вы узнали, они оба довольно сильно различаются по способу передачи изменений.Протокол RDP от MS является расширением Стандарт МСЭ (Т.128) которые можно купить онлайн.

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

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

VNC практически не знает основных графических примитивов, используемых для построения экрана.Это упрощает использование на любом компьютере, поскольку оно просто отслеживает изменения растрового изображения экрана.
RDP, с другой стороны, глубже подключается к Windows API и может оптимизировать свой поток на основе минимального объема информации, необходимой для создания того же обновления на клиенте.

Если вы хотите интегрировать функции удаленного рабочего стола, у вас есть несколько вариантов:

  • для RDP вы можете использовать ActiveX, используемый для удаленных веб-функций.Возможно, вы захотите взглянуть на обертка чтобы интегрировать его в ваше собственное программное обеспечение.
    Если вы хотите углубиться в это, есть исходный код для Linux. рабочий стол клиент, который подключается к машинам Windows через RDP.

  • для VNC существует ряд реализаций с открытым исходным кодом.
    Copilot от FogCreek на самом деле использует один из них, и вы можете получить его источник как он построен на TightVNC

Также существует ряд проектов по КодПроект на RDP и ВНК.

Другие советы

Как сказал Рено, VNC просто отправляет изменения растрового изображения блок за блоком, не зная, что это за контент.RDP намного умнее.

Вы можете точно узнать, что делает RDP, из этих двух спецификаций:

Уровень протокола:http://msdn.microsoft.com/en-us/library/cc240445(PROT.10).aspx

Уровень графики:http://msdn.microsoft.com/en-us/library/cc241537(PROT.10).aspx

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

  • Кэширование:Клиент может хранить большое количество ранее просмотренных блоков, а сервер может сообщать клиенту, как их использовать.Кроме того, они являются постоянными, поэтому, когда клиент подключается к серверу, на котором он уже был, он может объявить, какие блоки у него есть на диске.Очень полезно, когда окна перемещаются.Также многие части окон, например строка заголовка, одинаковы.

  • Рисование линий/блоков.Как вы уже догадались, в RDP есть операции для рисования линий, полигонов и прямоугольников.В окнах рисования они используются довольно часто.

  • Рисунок шрифта.У RDP есть способ отправлять глифы для шрифтов и сообщать клиенту об их отображении.

  • Рендеринг курсора.Значки курсора отправляются в виде глифов.VNC просто использует точку

Это самые большие, которые приходят на ум.Полный список функций рисования см. в разделе 2.2.7 «Наборы возможностей» спецификации протокола.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top