2009-02-12 8 views
6

Als Teil eines Client-Support-Tools möchte ich einige Funktionen bereitstellen, um eine Desktop-Sitzung anzeigen/remote steuern zu können. Es gibt eine Reihe von Möglichkeiten, um eine Bildschirmaufnahme zu machen und dann zu streamen, aber ich möchte insbesondere herausfinden, warum die RDP (Remote Desktop/Terminaldienste vs. VNC-Erfahrung so unterschiedlich ist. Ich verwende RDP vs VNC, nur weil sie scheinbar drastisch verschiedene Methoden verwenden, um den Bildschirm zum Client zu streamen.Unterschied zwischen RDP/Terminal Services und VNC-Streaming-Techniken

Wenn ich raten musste, scheint RDP Blöcke von Bitmap - Grafiken zu übertragen (sagen wir 100x100px), um das volle Bild zu erstellen kann sehr langsam sein), aber scheint, normal gemalte Formen/Füllungen, oder Zeichensatz zum Klienten extrem schnell zu übertragen. VNC scheint riesige Schnappschüsse des Schirmes zu nehmen, ein vorheriges Bild zu vergleichen und die Änderungen zum Klienten zu strömen.

Ich denke, dass RDP ein weitaus hochwertigeres und reibungsloseres Protokoll als alles andere ist da draußen, also welche Technik verwendet es, um dies zu erreichen?

EDIT-Nur um zu klären, frage ich über diese Grafiktechniken speziell als Streaming-Protokoll-Programmiermethode - nicht für die vorhandenen Produkt/Technologie zu verwenden, um diese Geschäftsanforderung zu lösen.

Antwort

9

Wie Sie herausgefunden haben, sind sie beide in der Art, wie sie den Stream ändern, ziemlich unterschiedlich. Das RDP-Protokoll von MS ist und die Erweiterung einer ITU standard (T.128), die online erworben werden kann.

RDP implementiert viele bandbreitensparende Techniken, die sich gegenseitig ergänzen und über niedrige Bandbreite sehr effizient machen.

VNC auf der anderen Seite hat sehr grundlegende Kompressionstechniken: es wird Blöcke von Bitmap, die sich geändert haben, senden und wird grundlegende Arten der Komprimierung von RLE zu JPEG, um diese Blöcke effizient zu übertragen.
Leider ist es immer noch ziemlich verschwenderisch bei geringer Bandbreite.

VNC hat im Grunde keine Kenntnis der zugrunde liegenden grafischen Grundelemente, die zum Erstellen des Bildschirms verwendet werden. Dies erleichtert die Verwendung auf jedem Computer, da nur Änderungen an der Bildschirm-Bitmap überwacht werden.
RDP hingegen greift tiefer in die Windows-API ein und kann seinen Stream basierend auf der minimalen Menge an Informationen optimieren, die zum Generieren desselben Updates auf dem Client erforderlich sind.

Wenn Sie Remote-Desktop-Funktionalitäten integrieren möchten, haben Sie ein paar Möglichkeiten:

  • für RDP können Sie das ActiveX verwenden für Web-Remote-Funktionalitäten verwendet. Vielleicht möchten Sie einen Blick auf eine wrapper werfen, um es in Ihre eigene Software zu integrieren.
    Wenn Sie tiefer in dieses Thema eintauchen möchten, gibt es Quellcode für den Linux-Client rdesktop, der über RDP eine Verbindung zu Windows-Maschinen herstellt.

  • für VNC gibt es eine Reihe von Open-Source-Implementierungen.
    FogCreek der Copilot tatsächlich verwendet man und man kann seine erhalten source, wie es auf TightVNC

Darüber hinaus gibt es eine Reihe von Projekten auf CodeProject on RDP und VNC gebaut wird.

3

Wie Renaud sagte, sendet VNC einfach Bitmap-Änderungen blockweise, ohne zu wissen, was der Inhalt ist. RDP ist viel schlauer.

Sie überprüfen können, genau das, was RDP aus diesen beiden Spezifikationen hat:

Protokollebene: http://msdn.microsoft.com/en-us/library/cc240445(PROT.10).aspx

Grafikebene: http://msdn.microsoft.com/en-us/library/cc241537(PROT.10).aspx

denke ich größten Gewinne RDP kommen aus:

  • Caching: Der Client kann eine große Menge von Pre speichern Der Server kann dem Client mitteilen, wie er sie verwenden soll. Diese sind auch persistent, wenn also ein Client eine Verbindung zu einem Server herstellt, auf dem er bereits existiert, kann er anzeigen, welche Blöcke er auf der Festplatte hat. Sehr nützlich, wenn Fenster verschoben werden. Auch viele Teile von Fenstern, wie die Titelleiste, sind gleich.

  • Linien-/Blockzeichnung. Wie Sie vermutet haben, hat RDP Operationen für Linien-, Poly- und Rect-Zeichnen. Mit Zeichnungsfenstern kommen diese ziemlich oft zum Einsatz.

  • Schriftart Zeichnung. RDP hat die Möglichkeit, über die Gylphs für Fonts zu senden und dem Client mitzuteilen, dass sie diese rendern sollen.

  • Cursor-Rendering. Die Cursorsymbole werden als Glyphen gesendet. VNC verwendet einfach einen Punkt

Das sind die großen, die in den Sinn kommen. In Abschnitt 2.2.7 Capability Sets der Protokollspezifikation finden Sie eine vollständige Liste der Zeichenfunktionen.