2009-02-12 10 views
6

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

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

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

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

ответ

9

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

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

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

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

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

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

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

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

3

Как сказал Рено, 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 имеет возможность отправлять через gylphs для шрифтов и сообщать клиенту, чтобы они их отображали.

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

Это большие, которые приходят на ум. Раздел 2.2.7 Возможности Наборы спецификаций протокола для полного списка функций чертежа.

 Смежные вопросы

  • Нет связанных вопросов^_^