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

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

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

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

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

2 ответов


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

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

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

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

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

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

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

есть также ряд проектов CodeProject на RDP и VNC.


Как сказал Рено, 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 имеет операции для line, poly и вильный рисунок. С рисованием окон они используются довольно много.

  • чертежный шрифт. У RDP есть способ отправить gylphs для шрифтов и сказать клиенту, чтобы отобразить их.

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

Это те, которые приходят на ум. Ознакомьтесь с разделом 2.2.7 наборы возможностей спецификации протокола для полного списка объектов рисования.