-
Technisches
Gebiet
-
Die
vorliegende Erfindung betrifft allgemein die Kommunikation zwischen
einem Anwendungsserver und einem Thin-Client in einem verteilten
System und insbesondere die Verringerung der Menge an graphischen
Anzeigedaten, die über
einen Transportprotokollmechanismus mit niedriger Bandbreite übertragen
werden.
-
Allgemeiner
Stand der Technik
-
Verteilte
Computersysteme verwenden die Technik der Verteilung der Anwendungsausführung. Genauer
gesagt führt
ein Anwendungsserver lokal ein Anwendungsprogramm aus und führt die
Anwendungsausgangsdaten Clients bzw. Netzwerkbenutzern zu, die die
Ergebnisse dann auf einem an ihren lokalen Computer angekoppelten
Anzeigeschirm anzeigen. Durch Durchführen der Anwendungsverarbeitungsfunktionen
im Server und Anzeigen der Anwendungsausgabe im Client nutzen diese
verteilten Systeme Server- und Client-Betriebsmittel am besten aus,
d.h. der leistungsstärkere
Server führt
die rechen- und speicherintensiven Anwendungsverarbeitungsfunktionen
durch, während
der Client mit potentiell größerer Videoleistungsfähigkeit
die Ausgabe anzeigt. Während
der Ausführung
des Anwendungsprogramms betrachtet ein Benutzer des Client die Anwendungsausgangsdaten
auf der Anzeige des Client und tritt über Tastatur oder Mauseingaben
mit dem Anwendungsprogramm in Dialog. Die Eingaben des Clientbenutzers
entsprechen Anforderungen für
den Anwendungsserver, bestimmte Aktionen durchzuführen, die
sich auf den Betrieb des Anwendungsprogramms auswirken.
-
Der
Anwendungsserver leitet diese Anforderungen zur weiteren Verarbeitung
zu der Anwendung weiter. Außerdem
fängt der
Anwendungsserver die Anwendungsausgangsdaten ab, die durch das Anwendungsprogramm
erzeugt werden und in der Regel auf das Betriebssystem des Anwendungsservers
abzielen, und sendet alle Daten oder einen Teil davon zur Anzeige
zu dem Client. Vom Benutzer aus gesehen scheint das Anwendungsprogramm
lokal ausgeführt
zu werden, obwohl es tatsächlich
auf einem abgesetzten Server ausgeführt und lediglich lokal angezeigt
wird.
-
Die
Leistungsfähigkeit
verteilter Systeme hängt
stark von der Fähigkeit
des Netzwerks ab, das Client und Server koppelt, und deshalb von
der Menge an graphischen Daten (entsprechend den Anwendungsausgangsdaten),
die über
das Netzwerk übertragen
wird. Da der Anwendungsserver und die Client-Workstation im allgemeinen
nur durch einen Transportmechanismus verbunden sind (wie zum Beispiel
serielle Leitungen, Telefonleitungen, lokale Netzwerke und großflächige Netzwerke),
der eine niedrigere Bandbreite besitzt, als ansonsten verfügbar wäre, wenn
das Anwendungsprogramm lokal ausgeführt werden würde, kann
die wahrgenommene Leistungsfähigkeit
des verteilten Systems beeinträchtigt
werden. Hersteller verteilter Systeme bzw. Software bemühen sich
folglich kontinuierlich, die Leistungsfähigkeit solcher Systeme zu
verbessern.
-
Aus
US 5,961,588 ist eine Client-Station
bekannt, die Befehle verarbeitet, die aus einer Warteschlange empfangen
werden, die auf einer Server-Station geführt wird.
-
Kurze Darstellung
der Erfindung
-
Die
Aufgabe der Erfindung wird durch die Merkmale des Verfahrensanspruchs
1 und des Systemsanspruchs 2 definiert.
-
Die
vorliegende Erfindung verbessert die Leistungsfähigkeit verteilter Systeme
durch Verringern der Menge an graphischen Daten (z.B. graphischen
Bitmap-Daten, codierten Bitmaps, Glyphe und Liniendaten), die zwischen
dem Server und dem Client übertragen
wird. Die Erfindung erreicht diese Verringerung auf mehrere verschiedene
Weisen, z.B. durch Codieren der graphischen Daten zu einem kleineren
Objekt, durch Repräsentieren
des graphischen Objekts mit Indizias des Objekts, durch Erhöhen der
sich wiederholenden Beschaffenheit der Daten in dem Protokollstrom,
so daß Komprimierungsalgorithmen
wirksamer arbeiten, durch Verfolgen und Verstärken der vorherigen Übertragungen
identischer bzw. sich wiederholender graphischer Objekte, durch
Anpassen der Rate der Verarbeitungsaktivität oder der Codierungstechnik
als Reaktion auf Änderungen
der Netzwerkleistungsfähigkeit
oder als Reaktion auf Leistungsfähigkeitsnichtübereinstimmungen
zwischen Client und Server und auf mehrere andere Weisen, die hier
beschrieben werden.
-
Bei
einer Ausführungsform
ermöglicht
die vorliegende Erfindung die effiziente Übertragung graphischer Anzeigedaten
von einem Anwendungsserverknoten zu einem Client-Knoten. Bei dieser
Ausführungsform
fängt die
Erfindung mehrere Befehle graphischer Anzeigeinformationen ab, die
von einer auf dem Server ausgeführten
Anwendung ausgegeben werden. Nachdem diese Befehle abgefangen oder
anderweitig erhalten wurden, werden sie analysiert, um zu bestimmen,
ob sie für
weitere Übertragung
zu abgesetzten Client-Knoten ausgewählt werden sollen. Die gewählten Befehle
werden dann zur letztendlichen Übertragung
zu den abgesetzten Client-Knoten zu einem Protokollpaketstrom codiert
und paketiert. Vor der Übertragung
kann der Paketstrom weiter komprimiert werden, indem die codierten
Pakete mit Komprimierungstechniken behandelt werden.
-
Die
erfindungsgemäße Codierungstechnik
maximiert im wesentlichen die Komprimierung des Protokollpaketstroms
durch Einbauen von Wiederholbarkeit in den Protokollstrom, wodurch
der Komprimierungsalgorithmus Zeiger für sich wiederholende Daten
substituieren kann. Diese Technik konzentriert sich auf das Maximieren
der Effizienz des Komprimierungsalgorithmus, statt einfach nur über Codierung
vor der Übertragung die
Menge an Daten zu verringern. Das Ergebnis dieses Codierungsschemas
ist, daß der
Komprimierungsgrad für
viele Arten graphischer Daten signifikant erhöht wird. Die Codierungstechnik
der vorliegenden Erfindung codiert die grapischen Daten dergestalt,
daß Teile
der graphischen Daten, die sich wiederholen, auf dieselbe Weise
codiert werden. Der Komprimierungsalgorithmus arbeitet dann an diesen
sich wiederholenden codierten Daten, um einen höheren Wirkungsgrad zu realisieren.
-
Bei
einer Ausführungsform
verringert die vorliegende Erfindung effizient die Menge an sich
wiederholenden graphischen Daten, die zu einer an den Client angekoppelten
abgesetzten Anzeigeeinrichtung übertragen
werden. Bei dieser Ausführung
sucht ein Server-Agent nach einem Index (der zuvor von dem Server-Agent
auf dem Server gespeichert worden sein kann), der mit den graphischen
Daten assoziiert ist und der eine vorherige Übertragung der graphischen
Daten zu einem Client-Agent anzeigt. Der Index bzw. das Handle repräsentiert
eine Speicherstelle in dem Cache-Speicher des Client, die zur Zeit
die zuvor übertragenen
graphischen Daten speichert. Wenn der Index gefunden wird, wird
der Index zu dem Client-Agent gesendet, wodurch es überflüssig wird,
die graphischen Daten selbst zu übertragen.
Der Client-Agent erhält
das an der durch den Index identifizierten Cache-Speicherstelle
gespeicherte graphische Objekt und führt, angeleitet durch den Server-Agent,
zusätzliche
Verarbeitungsaktivitäten
durch. In einem Aspekt der Erfindung werden Befehle und Informationen,
die zwischen Server-Agent und Client-Agent übertragen werden, im Server
in Warteschlangen eingeleitet. Die Befehle in der Warteschlange
können
dann gemäß einer
Schätzung
der relativen Leistungsfähigkeit
zwischen Client- und Server-Agent oder -Computern verarbeitet werden.
-
Wenn
der Server-Agent den Index nicht finden kann, durchsucht der Server-Agent
eine Fuzzy-Datenbank nach einem Fuzzy-Schlüssel, der mit den graphischen
Daten assoziiert ist. Der Fuzzy-Schlüssel entspricht zum Beispiel
einer Länge
der graphischen Daten. Der Fuzzy-Schlüssel zeigt
an, daß die
graphischen Daten schon einmal zu dem Client übertragen wurden und daß eine große Wahrscheinlichkeit
besteht, daß die graphischen
Daten in dem persistenten Speicher des Client gespeichert sind.
Bei Einleitung einer Sitzung zwischen Client- und Server-Agenten
werden ein oder mehrere Fuzzy-Schlüssel dem Server-Agent zugeführt. Alternativ
dazu werden die Fuzzy-Schlüssel
gemäß einem
vorbestimmten Abfrageintervall zu dem Server-Agent gesendet. Gleichgültig, wie
die Fuzzy-Schlüssel
empfangen werden, speichert der Server-Agent diese in der Fuzzy-Datenbank
zur nachfolgenden Benutzung während
der Client/Server-Sitzung. Die eine bestimmte Sitzung betreffende
Fuzzy-Datenbank kann auch über
die Dauer der Sitzung hinaus aufrechterhalten werden, so daß sie für zukünftige Sitzungen
verfügbar
ist, indem zum Beispiel der Client-Agent die graphischen Daten aus der
bestimmten Sitzung persistent cachespeichert und bewirkt wird, daß der Server-Agent
dynamisch die Fuzzy-Datenbank
auf dem Server während
einer zukünftigen
Sitzung aus den persistent cachegespeicherten graphischen Daten
des Client konstruiert. Dies kann sich in Umgebungen, in denen häufige aber
kurze Sitzungen vorkommen, als nützlich
erweisen.
-
Wenn
der Fuzzy-Schlüssel
gefunden wird, sendet der Server-Agent den Fuzzy-Schlüssel zusammen mit
einem Befehl zu dem Client-Agent, der zum Beispiel die in seinem
persistenten Speicher gespeicherten graphischen Daten abruft und
sie in seinen flüchtigen
Speicher kopiert. Wenn der Client-Agent die graphischen Daten nicht
abrufen kann, kann der Server-Agent die graphischen Daten zusammen
mit einer Recovery-Markierung
zu dem Client-Agent senden.
-
Wenn
der Server-Agent den Fuzzy-Schlüssel
nicht in der Fuzzy-Datenbank finden kann, bildet der Server-Agent
den Fuzzy-Schlüssel
und speichert den Fuzzy-Schlüssel
in der Fuzzy-Datenbank. Der Server-Agent sendet dann den Fuzzy-Schlüssel, einen
Index und die graphischen Daten zu dem Client-Agent, der angewiesen
wird, die Daten in dem mit dem Index assoziierten flüchtigen
Speicher des Client zu speichern. Wenn die Client-Server-Sitzung fortgesetzt
wird und der flüchtige
Speicher des Client voll wird, werden graphische Daten zu der persistenten
Speicherung des Client transferiert. In einem Aspekt speichert der
Client-Agent die
graphischen Daten in einer in dem persistenten Speicher verankerten
Datei, die den Fuzzy-Schlüssel als Teil
des Namens der Datei wiederspiegelt.
-
In
einem Aspekt der Erfindung weist der Server-Agent den Client-Agent
an, eine an den Client-Agent angekoppelte Off-Screen-Oberfläche unter
Verwendung der der graphischen Daten zu aktualisieren, die durch den
Server-Agent identifiziert und/oder in dem flüchtigen oder persistenten Speicher
des Client gespeichert werden. Diese Anweisungen können als
Reaktion auf eine Änderung
in der Off-Screen-Oberfläche
getriggert werden, wenn zum Beispiel die Off-Screen-Oberfläche und
die On-Screen-Oberfläche
des Client-Knotens in Wechselwirkung treten. Wenn der Client-Agent
die Off-Screen-Oberfläche nicht
gemäß den Anweisungen
des Server-Agenten aktualisieren kann, kann der Server-Agent die graphischen
Daten zu dem Client-Agent senden und den Client-Agent anweisen,
Teile seiner On-Screen- oder
Off-Screen-Oberflächen,
die verfälscht
worden sein können,
mit den übertragenen
graphischen Daten zu aktualisieren.
-
Die
Codierungstechnik, mit der die graphischen Daten vor der Übertragung
codiert werden, kann ferner auf der Basis einer Schätzung der
Netzwerkbedingungen des Netzwerks, das den Client-Agent mit dem Server-Agent
koppelt, ausgewählt
werden. Diese Schätzung
kann einer vom Client-Agent gemessenen Zeitdifferenz entsprechen,
die die Zeitdauer betrifft, die verbracht wurde, um bestimmte codierte
graphische Daten zu empfangen.
-
Bei
einer Ausführungsform
paßt die
vorliegende Erfindung eine Verarbeitungsrate als Reaktion auf sich ändernde
Netzwerkbedingungen an. In einem Aspekt der Erfindung verarbeitet
der Server-Agent an den Client-Agent
adressierte graphische Daten mit einer ersten Rate. Durch Bestimmung
der Netzwerkbedingungen des Netzwerks, das den Client- und Server-Agent
koppelt, kann der Server-Agent seine Verarbeitungsrate von der ersten
Rate aus als Reaktion auf eine Änderung
der Netzwerkbedingungen auf eine zweite Rate einstellen. Der Server-Agent
kann Informationen über
die Netzwerkbedingungen bestimmen, indem die verarbeiteten graphischen
Daten zu dem Client-Agent übertragen
werden und der Client angewiesen wird, eine mit der Übertragung
oder dem Empfang der graphischen Daten assoziierte Zeitdifferenz
zu messen. Auf diese Weise liefert die Zeitdifferenz eine Anzeige
der Netzwerkbedingungen, und der Server-Agent kann die zweite Rate gemäß dieser
Zeitdifferenz rational auswählen. Ähnlich kann
die während
der Verarbeitung der graphischen Daten durch den Server-Agent mit
einer ersten Rate verwendete Codierungstechnik als Reaktion auf Änderungen
der Netzwerkbedingungen, die durch den Server-Agent bestimmt werden,
in eine zweite Codierungsmethode/-technik umgeändert werden. Die Netzwerkbedingungen
können
wie bereits besprochen gemäß der Zeitdifferenz
geschätzt
werden. Nachdem der Server-Agent
die zweite Codierungstechnik ausgewählt hat, verarbeitet der Server-Agent
nachfolgende graphische Daten unter Verwendung dieser zweiten Codierungstechnik.
-
Bei
einer Ausführungsform
paßt die
Erfindung eine Verarbeitungsrate des Servers als Reaktion auf eine
Leistungsfähigkeitnichtübereinstimmung
zwischen dem Server und dem über
das Netzwerk an den Server angekoppelten Client an. Im Betrieb verarbeitet
der Server-Agent graphische Daten und bestimmt einen mit dieser
Verarbeitung assoziierten ersten Zeitraum. Zum Beispiel kann der
erste Zeitraum durch Rollen eines Rahmen-Puffers des Servers bestimmt
werden. Der Client-Agent
verarbeitet außerdem
die graphischen Daten und bestimmt einen mit dieser Verarbeitung
assoziierten zweiten Zeitraum. Der Server-Agent bestimmt dann die
Zeitdifferenz zwischen dem ersten und dem zweiten Zeitraum und stellt
seine Verarbeitungsrate dieser entsprechend ein.
-
Bei
einer Ausführungsform
verringert die Erfindung effizient die Menge an über ein Kommunikationsnetz
von einem Server zu einem Client übertragenen graphischen Liniendaten.
Der Server-Agent trennt einen Weg, der eine Linie oder eine Region
definiert, in mehrere Streifen auf, wobei jeder der Streifen eine
Anfangs- und eine
Endpunktkoordinate aufweist, die in einem Koordinatensystem (z.B.
einen kartesischen Koordinatensystem) definiert sind. Das Koordinatensystem
entspricht einer Region einer Anzeigeoberfläche, die mit dem Client assoziiert
ist. In einem Aspekt der Erfindung quantisiert der Server-Agent
das Koordinatensystem zu mehreren quantisierten Winkeln (z.B. 16
quantisierten Winkeln) und bestimmt die Endpunktkoordinate eines der
mehreren Streifen. Das Koordinatensystem wird dann so normiert,
daß sein
Ursprung mit seiner Endpunktkoordinate übereinstimmt.
-
Die
Anfangskoordinate des angrenzenden Streifens in dem Weg wird dann
durch den Server-Agent mit der Endpunktkoordinate des ersten Streifens
assoziiert. Der Server-Agent wählt
dann eines der quantisierten Segmente des Koordinatensystems als
einem ungefähren
Winkel des angrenzenden Streifens entsprechend. Diese Technik ermöglicht die Übertragung
der Differenz zwischen den Endpunktkoordinaten der beiden Streifen
(d.h. der Streifenlänge)
und einer Anzeige des gewählten
quantisierten Winkels und vermeidet somit, daß beide Koordinatenmengen oder
eine Koordinate und der präzise
Winkel für
jeden Streifen übertragen
werden müssen.
-
Bei
einer Ausführungsform
der Erfindung steuert der Server-Agent aus der Ferne die Bildung
einer Off-Screen-Obefläche in einem
Client, der über
ein Kommunikationsnetz an den Server angekoppelt ist. Der Server-Agent
informiert den Client-Agent, daß eine
Off-Screen-Oberfläche einer
bestimmten Größe oder
eines bestimmten Typs in dem Speicher des Client gebildet werden
soll und der Client-Agent reagiert durch Auswahl und Zuteilung einer
ersten Speicherregion mit einem entsprechenden Format zur Repräsentation
der Off-Screen-Oberfläche aus
mehreren verfügbaren
Speicherregionen in dem Speicher des Client. Der Server-Agent sendet
dann entweder eine Bitmap oder ein Indizia der Bitmap (z.B. Index
oder Fuzzy-Schlüssel)
zu dem Client-Agent
und weist den Client-Agent an, die Bitmap an eine bestimmte Stelle
in der ersten Speicherregion zu kopieren. Nachdem die Bitmap in
die Off-Screen-Oberfläche kopiert
wurde, kann sie zur Aktualisierung der On-Screen-Oberfläche des
Client verwendet werden. Solche Off-Screen-Operationen können auch für nicht-Bitmap-Daten, wie
zum Beispiel Linien oder Text, durchgeführt werden.
-
Der
Server-Agent kann außerdem
auf Fehlerbedingungen reagieren, indem er ein Duplikat der Off-Screen- Oberfläche des
Client in dem lokalen Speicher des Servers speichert. Im Fall einer
Fehlerbedingung, wenn zum Beispiel eine vorgewählte Speicherregion des Speichers
des Client nicht groß genug
ist, um eine bestimmte Off-Screen-Oberfläche zu speichern, informiert
der Client-Agent den Server-Agent asynchron über den Fehler. Als Reaktion
auf die Fehlerbedingung sendet der Server-Agent mindestens einen
Teil seines Duplikats der Off-Screen-Oberfläche oder einer Kopie der Bitmap
zu dem Client-Agent und weist den Client-Agent an, die On-Screen-Oberfläche des
Client unter Verwendung der übertragenen
duplizierten Off-Screen-Oberflächendaten
zu aktualisieren.
-
Kurze Beschreibung
der Zeichnungen
-
Die
obige Diskussion wird aus der folgenden ausführlichen Beschreibung der Erfindung
in Verbindung mit den beigefügten
Zeichnungen besser verständlich.
Es zeigen:
-
1 schematisch
einen Client-Knoten, der über
ein Kommunikationsnetz an einen Server-Knoten angekoppelt ist, wobei
Client- und Server-Knoten jeweils einen jeweiligen Client- und Server-Agenten
aufweisen, der gemäß einer
Ausführungsform
der vorliegenden Erfindung arbeitet;
-
2 ein
Flußdiagramm
auf hoher Ebene der von dem Server-Agent von 1 gemäß einer
Ausführungsform
der vorliegenden Erfindung durchgeführten Schritte;
-
3 ein
ausführlicheres
Flußdiagramm
des Diagramms von 2 gemäß einer Ausführungsform der
vorliegenden Erfindung;
-
4 schematisch
den Inhalt des flüchtigen
und persistenten Speichers von Client und Server, so wie er durch
Operationen des Client- und Serveragenten von 1 beeinflußt wird,
gemäß einer
Ausführungsform der
vorliegenden Erfindung;
-
5 ein
Flußdiagramm
der unternommenen Schritte zur Minimierung der Menge an zu dem Client übertragenen
Daten durch Verwendung von Cache-Techniken unter Beteiligung einer
Fuzzy-Datenbank und von Fuzzy-Schlüsseln gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
6 schematisch
eine Menge von Prozeduren, mit der durch ein Anwendungsprogramm
auf einem Server erzeugte Textinformationen zu einer Anzeige eines
fernen Client remotet werden, gemäß einer Ausführungsform
der vorliegenden Erfindung;
-
7A ein
Liniendiagramm mehrerer Segmente, die einen bestimmten Weg bilden;
-
7B eine
Repräsentation
des Liniendiagramms von 7A auf
Pixelebene, die darstellt, wie der Weg auf einer Computeranzeige
tatsächlich
approximiert wird;
-
8 ein Flußdiagramm der unternommenen
Schritte bei der Verarbeitung und Codierung von Segment- und Streifendaten
gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
8B ein
Koordinatensystem, das zu einer Menge von 16 Regionen organisiert
wird, mit dem Winkelinformationen in bezug auf Streifen quantisiert
werden und das die Komprimierungseffizienz verbessert, gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
9 eine Überlagerung
des Koordinatensystems von 8B auf
die Pixelebenenrepräsentation
von 7B, um eine Ausführungsform einer Streifenverarbeitungstechnik
gemäß der vorliegenden
Erfindung darzustellen;
-
10 eine
Tabelle, die darstellt, wie man von dem Endpunkt des vorherigen
Streifens für
Streifen in jedem der quantisierten Segmente von 8B gemäß einer
Ausführungsform
der vorliegenden Erfindung zu dem nächsten Streifen gelangt; und
-
11 ein
Flußdiagramm
der von dem Server-Agent als Reaktion auf eine Fehlerbedingung,
an der die Bildung einer Off-Screen-Oberfläche des Client beteiligt ist,
durchgeführten
Schritte.
-
Ausführliche
Beschreibung der Erfindung
-
Die
vorliegende Erfindung verringert die Menge an zwischen einem Anwendungsserver,
der ein Anwendungsprogramm ausführt,
und einem teilnehmenden Client, der lokal die Ausgangsdaten des
Anwendungsprogramms anzeigt, übertragenen
graphischen Daten durch codieren der Daten zu relativ kleinen Repräsentationen,
die sich in dem zwischen Client und Server übertragenen Protokollstrom
wiederholen. Auf diese Weise minimiert die Erfindung die Größe jedes
diskreten Datenelements, das übertragen
werden muß,
und vergrößert die
Wiederholbarkeit der Daten in dem Protokollstrom, so daß Komprimierungsalgorithmen,
die an sich wiederholenden codierten Daten effizienter arbeiten,
einen höheren
Grad an Komprimierungseffizienz realisieren können. Die Erfindung verwendet
mehrere Techniken zur Realisierung dieser verbesserten Komprimierung,
darunter die folgenden: Scannen einer Befehlswarteschlange nach
später
ausgegebenen Befehlen, die früher
ausgegebene Befehle ablösen;
Platten-Cache-Techniken,
die die Komprimierung von Daten, die zuvor während einer Client-Server-Sitzung
angetroffen wurden, verbessern; Übertragung
relativer Koordinaten unter Verwendung von quantisierten Regionen
zur Vermeidung des Sendens beider Endpunkte und/oder des Winkels
eines assoziierten Streifens; und Manipulation von Off-Screen-Oberflächen zur
Verbesserung der Leistungsfähigkeit
während
der Client-Server-Sitzung. Außerdem
verringert die Erfindung die Häufigkeit
von Überrollproblemen,
die auftreten, wenn eine Leistungsfähigkeitnichtübereinstimmung
zwischen einem schnellen Server und einem relativ langsamen Netzwerk
oder Client besteht.
-
Mit
Bezug auf 1 kommunizieren ein oder mehrere
Client-Knoten 110', 110'' (im folgenden wird jeder Client-Knoten
oder jede Vielzahl von Client-Knoten allgemein als 110 bezeichnet)
mit einem oder mehreren Server-Knoten 150', 150'' (im
folgenden wird jeder Server-Knoten oder jede Vielzahl von Server-Knoten
allgemein als 150 bezeichnet) über ein Kommunikationsnetz 140.
Das Netzwerk 140 kann ein lokales Netzwerk (LAN), ein mittelflächiges Netzwerk
(MAN) oder ein großflächiges Netzwerk
(WAN), wie zum Beispiel das Internet oder das World Wide Web, sein.
Benutzer des Client-Knotens 110 können durch vielfältige Verbindungen
mit dem Netzwerk 140 verbunden sein, wie zum Beispiel Standard-Telefonleitungen,
LAN- oder WAN-Strecken
(z.B. T1, T3, 56kb, X.25), Breitbandverbindungen (ISDN, Frame Relay,
ATM) und drahtlose Verbindungen. Die Verbindungen können mit
vielfältigen
Kommunikationsprotokollen (z.B. TCP/IP, IPX, SPX, NetBIOS und direkte
asynchrone Verbindungen) hergestellt werden. Bei einigen besonders
vorteilhaften Ausführungsformen
kann das verwendete Protokoll das Protokoll der unabhängigen Datenverarbeitungsarchitektur
sein, das von Citrix Systems, Inc. in Fort Lauderdale, Florida,
hergestellt wird, oder das Remote Display Protokoll von Microsoft
Corporation, Redmond, Washington.
-
Der
Client-Knoten 110 kann ein beliebiger PC sein (z.B. 286,
386, 486, Pentium, Pentium II, Macintosh-Computer), ein Windows-gestütztes Terminal,
ein Netzwerkcomputer, eine drahtlose Einrichtung, ein Informationsgerät, ein RISC-Power-PC,
eine X- Einrichtung,
eine Workstation, ein Minicomputer, ein Zentralcomputer oder eine
andere Datenverarbeitungseinrichtung mit Windows-gestütztem Desktop
und genug Speicher zum Ausführen
eines kleinen Anzeigepräsentationsprogramms.
Das Anzeigepräsentationsprogramm
verwendet Befehle und Daten, die ihm durch den Anwendungs-Server 150 über das
Netzwerk 140 gesendet werden, um eine graphische Anzeige
wiederzugeben. In einem verteilten Computersystemmodell findet die
Ausführung von
Anwendungsprogrammen hauptsächlich
auf dem Anwendungsserver 150 statt, und Benutzerschnittstelle, Tastenbetätigungen
und Mausbewegungen, die durch Eingaben auf Client-Seite produziert
werden, werden über
das Netzwerk 140 zu und von dem Client-Knoten 110 übertragen.
-
Der
Client-Knoten 110 enthält
in der Regel einen Prozessor 112, einen flüchtigen
Speicher 114 (z.B. RAM-Cache),
ein Betriebssystem 116, einen Client-Agent 118,
einen persistenten Speicher 120, eine Netzwerkschnittstelle 122 (z.B.
eine Netzwerkschnittstellenkarte), eine Tastatur 124, eine
Maus 126 und ein Display 128. Durch den Client-Knoten 110 unterstützte fensterorientierte
Plattformen sind zum Beispiel ohne Einschränkung WINDOWS 3.x, WINDOWS
95, WINDOWS 98, WINDOWS NT 3.51, WINDOWS NT 4.0, WINDOWS 2000, WINDOWS
CE, MAC/OS, Java und UNIX. Der Client-Agent 118 entspricht
einem Softwareprogramm, das Befehle und Daten aus dem Server-Knoten 150 und
von einem (nicht gezeigten) Benutzer des Client-Knotens 110 empfängt. Der
Client-Agent 118 verwendet die empfangenen Informationen
bei der Wechselwirkung mit anderen Komponenten des Client-Knotens 110 (z.B.
beim Anleiten des Betriebssystems 116, Daten auf dem Display 128 auszugeben).
Der Client-Agent 118 sendet außerdem Anforderungen und Daten als
Reaktion auf vom Server ausgegebene Befehle oder Benutzeraktionen
an den Client-Knoten 110 zu dem Server-Knoten 150.
-
Ähnlich enthält der Server-Knoten 150 einen
Prozessor 152, einen flüchtigen
Speicher 154, ein Betriebssystem 156, ein Anwendungsprogramm 158,
einen Server-Agent 160, persistenten Speicher 162 und eine
Netzwerkschnittstelle 164. Der Server-Agent 160 entspricht
einem Softwareprogramm, das mit dem Client-Agent 118 und anderen Komponenten
des Server-Knotens 150 eine Schnittstelle aufweist, um
die Fernanzeige und -operabilität
des Anwendungsprogramms 158 zu unterstützen.
-
Jeder
Anwendungsserver 150 ist Host für ein oder mehrere Anwendungsprogramme 158,
auf die die Client-Knoten 110 zugreifen
können.
Solche Anwendungen sind zum Beispiel Textverarbeitungsprogramme wie
etwa MICROSOFT WORD und Tabellenkalkulationsprogramme wie etwa MICROSOFT
EXCEL, wobei beides von der Microsoft Corporation in Redmond, Washington
hergestellt wird, Finanzberichtsprogramme, Kundenregistrationsprogramme,
Programme, die technische Support-Informationen liefern, Kundendatenbankanwendungen
oder Anwendungssatzmanager.
-
Während der
Ausführung
des Anwendungsprogramms 158 kommuniziert ein Server 150 über einen Transportmechanismus
(Teil des Server-Agenten 160) mit dem Client-Knoten 110.
Bei einer Ausführungsform liefert
der Transportmechanismus mehrere virtuelle Kanäle, und einer der virtuellen
Kanäle
liefert ein Protokoll zur Übertragung
graphischer Schirmdaten von dem Server-Knoten 150 zu dem
Client-Knoten 110. Der Server 150 führt einen
Protokolltreiber (Teil des Server-Agenten 160) aus, der
graphische Anzeigeschnittstellenbefehle (die durch das Anwendungsprogramm 158 erzeugt
werden und auf das Betriebssystem 156 des Servers abgezielt
sind) abfängt,
und übersetzt
diese in ein Protokollpaket, das für Übertragung über den Transportmechanismus
geeignet ist.
-
Bei
einer Ausführungsform
und mit Bezug auf 2 fängt der Server-Agent 160 einen
graphischen Anzeigeschnittstellenbefehl ab (Schritt 202),
der durch das Anwendungsprogramm 158 ausgegeben wird und an
das Betriebssystem 156 gerichtet ist, codiert mit dem Befehl
und dem Anwendungsprogramm 158 assoziierte graphische Daten
(Schritt 204), komprimiert die codierten graphischen Daten
(Schritt 206), erzeugt ein Transportprotokollpaket, das
den abgefangenen Befehl und komprimierte codierte Daten enthält (Schritt 208) und
sendet das Transportprotokollpaket zu dem Ziel-Client-Knoten 110 (Schritt 210).
Graphische Daten bedeutet eine beliebige Art von Daten, die auf
dem Display 128 angezeigt werden kann, wie zum Beispiel
Bitmaps, Glyphe, Koordinaten, Liste von Linien, Streifen usw. Beschreibungen
von Techniken, die auf bestimmte Arten graphischer Daten oder graphischer
Objekte angewandt werden, können
im folgenden als für
alle Arten von graphischen Daten geltend betrachtet werden.
-
Genauer
gesagt fängt
ein Protokolltreiber des Server-Agenten 160 die
graphischen Anzeigeschnittstellenbefehle ab (Schritt 202).
Bei einer Ausführungsform
fängt der
Protokolltreiber die Anwendungsprogrammierschnittstellenaufrufe
hoher Ebene ab, die von dem Anwendungsprogramm 158 getätigt werden.
Bei einer Ausführungsform
fängt der
Protokolltreiber GDI-Befehle ab, die durch Betriebssysteme auf WINDOWS-Basis bereitgestellt
werden. Bei einer anderen Ausführungsform
fängt der
Protokolltreiber QUICKDRAW-Befehle
ab, die von Betriebssystemen auf MAC/OS-Basis bereitgestellt werden.
Bei weiteren Ausführungsformen
fängt der Protokolltreiber
Befehle auf niedrigerer Ebene, wie zum Beispiel Schnittstellenaufrufe
für den
mit dem graphischen Display des Server-Knotens 150 assoziierten
Gerätetreiber,
ab. Bei weiteren Ausführungsformen
kann der graphische Anzeigeschnittstellenbefehl dupliziert werden,
anstatt abgefangen.
-
Bei
diesen Ausführungsformen
ist die Anzeige von Anwendungsprogramm-Ausgangsdaten auf dem Server 150 und
dem Client 110 im wesentlichen ähnlich oder sogar identisch.
Der Protokolltreiber erzeugt ein Transportprotokollpaket auf der
Basis des abgefangenen graphischen Anzeigebefehls (Schritt 208).
Der Protokolltreiber kann einen Protokollbefehlssatz verwenden,
der einen analogen Befehl für
jeden möglichen
abgefangenen Anzeigeschnittstellenbefehl enthält. Als Alternative kann der
Protokolltreiber einen Befehlssatz verwenden, der eine Teilmenge
der abgefangenen Anzeigeschnittstellenbefehle ist. Bei anderen Ausführungsformen
kann der Protokollbefehlssatz eine Übermenge der möglichen
abgefangenen Anzeigeschnittstellenbefehle sein.
-
Für jeden
abgefangenen GDI-Befehl und betroffene graphische Daten, die zu
dem Client-Agent 118 gesendet werden müssen, um die Ausgabe des Anwendungsprogramms 158 auf
dem Display 128 des Client anzuzeigen, reiht der Server-Agent 160 den
betreffenden Protokollbefehl zusammen mit einem eindeutigen Schlüssel 412 (4),
der mit den betroffenen graphischen Daten assoziiert ist, in Warteschlangen
ein. Der eindeutige Schlüssel 412 beschreibt
die graphischen Daten und identifiziert sie eindeutig. Bei einer
Ausführungsform
wird der eindeutige Schlüssel
durch Durchführen
einer 64-Bit-CRC (cyclic redundancy check) an den graphischen Daten
erzeugt. Bei einer anderen Ausführungsform
wird die 64-Bit-CRC
als zwei 32-Bit-CRCs erzeugt, die sequentiell und in entgegengesetzten
Richtungen an den graphischen Daten durchgeführt wird. Außerdem können andere
Verfahren zum Erzeugen eines mit graphischen Daten assoziierten eindeutigen
Schlüssels,
die Fachleuten bekannt sind, verwendet werden. Der Protokollbefehl
und der eindeutige Schlüssel 412 werden
in dem Server 150 zusammen mit anderen Befehls- bzw. eindeutigen
Schlüsselsätzen in
Warteschlangen eingereiht. Die in Warteschlangen eingereihten Befehle
werden dann gescannt, um zu bestimmen, ob später ausgegebene Befehle (d.h.
diejenigen in der Nähe
des Endes der Warteschlange) früher ausgegebene
Befehle (d.h. die näher
am Vorderende der Warteschlange) ablösen. Wenn die früher ausgegebenen
Befehle abgelöst
werden, entfernt der Server-Agent 160 diese aus der Warteschlange
und vermeidet somit, daß unnötige Daten
zu dem Client-Agent 118 gesendet werden müssen.
-
Zum
Beispiel muß eine
Reihe von Befehlen zur Anzeige der nächsten Seite von in schneller
Abfolge ausgegebenen Daten nicht einzeln am Client 110 angezeigt
werden. Es muß lediglich
die letzte ausgegebene Anzeigeseite angezeigt werden, da diese letzte
Seite Daten alle vorherigen Datenseiten überschreibt. Durch Entfernen
unnötiger
Befehle und eindeutiger Schlüssel,
die den früheren
Seiten entsprechen, aus der Warteschlange des Servers, verringert
der Server-Agent 160 die Menge an Daten, die verarbeitet
und übertragen werden
muß, wesentlich.
-
Bei
einem Ausführungsbeispiel
werden nur unnötige
Befehle und betreffende Daten in bezug auf opake Operationen aus
der Warteschlange des Servers entfernt. Wenn zum Beispiel einem
zuvor eingereihten Befehl, bei dem eine rechteckige Region mit Koordinaten
10, 10, 50, 50, ein später
eingereihter Befehl folgt, bei dem eine größere/abdeckende rechteckige
Region mit Koordinaten 0, 0, 100, 100 erzeugt wird, dann werden der
zuvor eingereihte Befehl und betreffende Daten als unnötig angesehen
und aus der Warteschlange entfernt.
-
Die
nachfolgende Tabelle 1 führt
einen beispielhaften Satz von Protokollbefehlen auf, die bei einer Ausführungsform
der Erfindung bereitgestellt werden.
-
-
-
-
TABELLE
1 – PROTOKOLLBEFEHLE
-
Bei
einer Ausführungsform
werden Protokollbefehle und assoziierte graphische Daten so konfiguriert, daß die Wiederholung
von Informationen in dem durch den Protokolltreiber erzeugten Protokollpaketstrom
maximiert wird. In einem Aspekt der Erfindung werden die graphischen
Daten zuerst codiert (Schritt 204), bevor die codierten
graphischen Daten und/oder Protokollbefehle einem Komprimierungsalgorithmus
unterzogen werden (Schritt 206), der die sich wiederholende
Beschaffenheit des Protokollstroms ausnutzt (z.B. kann ein Lempel-Ziv-Komprimierungsprotokoll
verwendet werden). Bei einer Ausführungsform und bei der ersten
Instanz der graphischen Daten in der Client-Server-Sitzung wird
ein Indizia der graphischen Daten zusammen mit den entsprechenden
codierten Daten in dem Protokollstrom gesendet, um so die Menge
an über
das Netzwerk 140 transferierten Daten für zukünftige Instanzen der graphischen
Daten, die während
derselben Client-Server-Sitzung
auftreten, zu verringern. Die komprimierten Daten werden danach
zu dem Transportprotokollpaket gebündelt und zur Dekomprimierung
und Interpretation zu dem Client-Knoten 110 gesendet (Schritt 208).
Bei einem Ausführungsbeispiel
führt das
Anwendungsprogramm 158 einen GDI-Befehl aus, der das Betriebssystem 156 des
Servers anweist, eine Bitmap zu zeichnen. Der Server-Agent 160 fängt diesen
GDI-Befehl ab (Schritt 202) und gibt einen BITBLT-Befehl
an den Client-Agenten 118 aus, der den Client-Agenten 118 anweist,
die Ausgangsdaten des Anwendungsprogramms auf dem Display 128 des
Client anzuzeigen. Vor dem Ausgeben des BITBLT-Befehls codiert der
Server-Agent 160 die Ausgangsdaten (Schritt 204)
und fügt
die codierten Daten zusammen mit dem BITBLT-Befehl in den zu dem Client-Agenten 118 übertragenen
komprimierten Protokollpaketstrom ein. Bei einer Ausführungsform
werden die die Bitmap 410 (4) beschreibenden
Daten codiert und komprimiert (Schritte 204 und 206),
um bestimmte der in der Bitmap 410 vorhandenen Redundanzen
auszunutzen. Die Bitmap 410 kann zum Beispiel dergestalt
sein, daß sukzessive
Rasterzeilen redundant oder benachbarte Pixel redundant sind.
-
Zusätzlich zu
der Codierung von Bitmaps oder anderer diskreter graphischer Datenelemente
auf der Basis ihrer internen Datenredundanzen umfaßt die Erfindung
auch Cache-Techniken, die die Codierung und Komprimierung graphischer
Daten, die zuvor während
einer bestimmten Client-Server-Sitzung angetroffen wurden, weiter
verbessern. Wenn zum Beispiel eine bestimmte Bitmap zum ersten Mal
während
einer Client-Server-Sitzung angetroffen wird, wird sie wie oben
beschrieben codiert. Für
nachfolgende Übertragungen der
Bitmap während
derselben Client-Server-Sitzung können Indizia der Bitmap übertragen
werden, anstatt der relativ größeren codierten
Bitmap. Bei einer Ausführungsform
entsprechen die Indizia einer Speicherstelle in dem flüchtigen
Speicher des Client, die die zuvor übertragene Bitmap enthält.
-
Genauer
gesagt und mit Bezug auf 3 und 4 erzeugt
der Server-Agent 160 wie oben beschrieben den eindeutigen
Schlüssel 412 (Schritt 330)
und assoziiert den eindeutigen Schlüssel 412 mit den graphischen
Daten (z.B. der Bitmap 410). Diese Assoziation definiert
im wesentlichen die Bitmap 410 und ihre betreffenden Daten
als ein graphisches Objekt, das danach zusammen mit seinem eindeutigen
Schlüssel 412 und
den codierten Daten 414 in einer Datenstruktur 411 (z.B.
einer Tabelle), die in dem flüchtigen
Speicher 154 des Servers (z.B. dem Cache-Subsystem des
Servers) gespeichert wird, registriert (Schritt 340). Bei
anderen Ausführungsformen
können
die bitmapbezogenen Daten in die persistente Speicherung 162 des
Servers geschrieben werden.
-
Vorausgesetzt,
daß der
Protokollbefehl (z.B. BITBLT) und assoziierte graphische Daten nicht
durch später
ausgegebene Befehle (wie oben beschrieben) abgelöst werden, entfernt der Server-Agent 160 (Schritt 360)
den BITBLT-Befehl und den eindeutigen Schlüssel 412 aus der Warteschlange
und durchsucht die in dem flüchtigen
Speicher 154 des Servers gespeicherte Tabelle 411,
um zu bestimmen, ob der eindeutige Schlüssel 412 zuvor darin
gespeichert wurde. Wenn der eindeutige Schlüssel 412 in der Tabelle 411 gefunden
wird, bestimmt der Server-Agent 160, daß die codierten Daten 414 zuvor
durch den Server 150 verarbeitet wurden. Der Server-Agent 160 durchsucht
dann die Tabelle 411 nach einem mit der codierten Bitmap 414 assoziierten Index
oder Handle 416. Wenn der Index 416 gefunden wird,
bestimmt der Server-Agent 160, daß die codierte Bitmap 414 nicht
nur durch den Server 150 verarbeitet wurde, sondern daß sie auch
zuvor zu dem Client-Agenten 118 übertragen wurde. Wenn der Index 416 nicht
in der Tabelle 411 gefunden wird, bestimmt der Server-Agent 160,
daß die
codierte Bitmap 414 noch nicht zuvor übertragen wurde.
-
Bei
einer Ausführungsform
identifiziert der Index 416 die eine bestimmte Speicherstelle
in dem flüchtigen
Speicher 114 des Client, die die zuvor übertragene codierte Bitmap 414 speichert.
Bei einer Ausführungsform
führt der
Client-Agent 118 einen Schnappschuß seines verfügbaren flüchtigen
Speichers 114 bei Einleitung einer Client-Server-Sitzung
mit dem Server-Agenten 160 dem Server-Agenten 160 zu.
Nachdem die Sitzung hergestellt ist, steuert der Server-Agent 160 danach
die Zuteilung des verfügbaren
flüchtigen
Speichers 114 des Client. Auf diese Weise kann der Server-Agent 160 den
flüchtigen
Speicher 114 des Client der codierten Bitmap 414 zuteilen
und dem Index 416 als Zeiger oder Referenz auf den zugeteilten
Speicher und als Kennung der zuvor übertragenen codierten Bitmap 414 führen.
-
Wenn
der Index 416 in der Tabelle 411 des Servers gefunden
wird, erhält
der Server-Agent 160 den Index 416 (Schritt 370),
komprimiert den Index 416 zusammen mit dem betreffenden
Protokollbefehl (Schritt 380) und sendet die komprimierten
Daten über
das Netzwerk 140 in einem an den Client-Agenten 118 gerichteten
Paket. Bei einer Ausführungsform
ist der Index 416 kürzer
(z.B. 16 Bit) als der eindeutige Schlüssel 412 (z.B. 64
Bit) und verbraucht folglich weniger Bandbreite bei der Übertragung.
Nach Empfang und Dekomprimierung des komprimierten Pakets greift
der Client-Agent 118 auf die bestimmte Speicherstelle in
dem flüchtigen
Speicher 114 des Client zu, die durch den Index 416 spezifiziert
wird, um die entsprechenden graphischen Daten 410 zu erhalten.
Der Client-Agent 118 manipuliert danach die erhaltenen
graphischen Daten 410 gemäß dem Befehl, der mit dem Index 416 in
dem komprimierten Paket einherging. Auf diese Weise vermeidet die
Erfindung, daß relativ
große
Bitmap- oder andere graphische Daten, die bereits zuvor während einer
bestimmten Client-Server-Sitzung
angetroffen wurden, neu übertragen
werden müssen.
-
Wenn
sich der Index 416 nicht in der Tabelle 411 des
Servers befindet (und somit nicht zuvor zu dem Client-Agenten 118 gesendet
wurde), teilt der Server-Agent 160 einen Teil des flüchtigen
Speichers 114 des Client für die Bitmap 410 zu
und bildet den Index 416, der die Speicherstelle identifiziert.
Der Server-Agent 160 speichert dann die codierte Bitmap 414 (die
der Bitmap 410 entspricht), den neugebildeten Index 416 und
den eindeutigen Schlüssel 412,
der mit der codierten Bitmap 414 assoziiert ist, in der
Tabelle 411 des Servers. Der Server-Agent 160 komprimiert
danach die codierte Bitmap 414, den Index 416 und
den betreffenden Befehl und sendet die komprimierten Daten in einem
an den Client-Agenten 118 gerichteten
Paket. Nach Empfang und Dekomprimierung decodiert der Client-Agent 118 die
codierten Daten 414 und speichert die resultierende Bitmap 410 in
der durch den Index 416 identifizierten Speicherstelle
und manipuliert die resultierende Bitmap 410 gemäß dem einhergehenden
Befehl. Als Alternative speichert der Client-Agent 118 die
codierten Daten 414 in der durch den Index 416 identifizierten
Speicherstelle und decodiert die codierten Daten 414 nur
dann, wenn es notwendig ist, um die resultierende Bitmap 410 weiter
zu manipulieren. Auf diese Weise wird der Client-Speicher effizienter
genutzt.
-
Obwohl
die Erfindung bisher so beschrieben wurde, daß der Server-Agent 160 die
Speicherzuteilung und Indexbildung des Client steuert, ist es auch
möglich,
daß der
Client-Agent 118 diese Funktionen durchführt. Wenn
zum Beispiel eine Bitmap zum ersten Mal während einer Client-Server-Sitzung
angetroffen und codiert, komprimiert und zu dem Client-Agenten 118 übertragen
wird (mit dem einhergehenden Befehl, aber ohne den Index 416),
kann der Client-Agent 118 die bestimmte Speicherstelle
in seinem flüchtigen
Speicher 114 zum Speichern der Bitmap 410 bestimmen.
Bei dieser Ausführungsform
bildet der Client-Agent 118 einen (nicht gezeigten) Index,
der die codierte Bitmap und ihre entsprechende Speicherstelle eindeutig
identifiziert, und sendet den Index zu dem Server-Agenten 160,
der den Index in der entsprechenden Speicherstelle in der Tabelle 411 des
Servers speichert.
-
Weiter
mit Bezug auf die Ausführungsform,
bei der der Server-Agent 160 die Zuteilung des flüchtigen Speichers 114 des
Client steuert, führt
der Client-Agent 118 eine kreisförmige Warteschlange 421 aller
durch den Server-Agenten 160 spezifizierten
Indizes gemäß Warteschlangenwartungsanweisungen,
die ebenfalls von diesem empfangen werden. Zum Beispiel kann der
Server-Agent 160 den
Client-Agenten 118 anleiten, einen vorbestimmten Block
von Indizes 417 (z.B. entsprechend 128 K Speicher) von
ihren jeweiligen graphischen Daten zu disassoziieren, um neuangetroffene
graphische Objekte unterzubringen, wenn der flüchtige Speicher 114 des
Client ansonsten voll belegt ist. Folglich erhält ein nachfolgendes neues
graphisches Objekt einen zuvor benutzten Index.
-
Der
Server-Agent 160 bestimmt außerdem gemäß vorbestimmten Kriterien,
ob jedes durch die Umzuweisung der Indizes betroffene graphische
Objekt ausgeräumt oder
gesichert werden soll. Der Server-Agent 160 übermittelt
diese Entscheidung zu dem Client-Agenten 118. Wenn zum
Beispiel der Server-Agent 160 die Indizes 0, 1, 2 und 3
neu zuweist und bestimmt, daß die
mit den Handles 0 und 2 assoziierten graphischen Objekte gelöscht oder
in die persistente Speicherung 120 des Client verschoben
werden sollen, und die mit den Handles 1 und 3 assoziierten Objekte
gesichert werden sollen, weist der Server-Agent 160 somit
den Client-Agenten 118 an,
0 und 2 zu löschen
(oder zu verschieben) und 1 und 3 zu sichern. Der Client-Agent 118 verschiebt
den Index jedes gesicherten Objekts dann zu dem Ende der kreisförmigen Warteschlange.
Mindestens ein Index bleibt am Warteschlangenende für die Zuweisung
zu dem verschobenen Objekt verfügbar;
d.h., bei einer Ausführungsform
zeigen Kopf und Ende der Warteschlangen nicht auf denselben Index
in der kreisförmigen
Warteschlange. Ein verschobenes Objekt wird folglich sowohl an einer
anderen physischen Speicherstelle gespeichert als auch mit einem
anderen Index assoziiert.
-
Die
an der kreisförmigen
Warteschlange 421 des Client ausgeführten Wartungsaktionen werden
in der Regel mit andauernder Client-Server-Sitzung häufiger,
und der begrenzte flüchtige
Speicher 114 des Client 110 wird voll von zuvor übertragenen
Bitmaps 410 oder anderen graphischen Objekten. Die Anzahl
der zuvor übertragenen
graphischen Objekte 422, die aus dem flüchtigen Speicher 114 in
die persistente Speicherung 120 des Client verschoben werden,
nimmt also zu. Die vorliegende Erfindung erweitert die oben beschriebene Cache-Technik
weiter, um nach Indizia (siehe "Fuzzy-Schlüssel" unten) zuvor übertragener
graphischer Objekte 422 zu suchen, die in der persistenten
Speicherung 120 des Client gespeichert sein können, wenn
kein Index auf dieses graphische Objekt 422 in der Tabelle 411 des
Servers gefunden wird. Wenn ein solches Indizia gefunden wird, besteht
eine große Wahrscheinlichkeit,
daß das
zuvor übertragene
graphische Objekt 422 immer noch lokal verankert und dem
Client-Agent 118 zugänglich
ist und daß das
graphische Objekt 422 deshalb möglicherweise nicht neu aus
dem Server-Agenten 150 zu dem Client-Agenten 110 übertragen
werden muß.
Es ist wichtig, zu beachten, daß das
Finden solcher Indizias eine große Wahrscheinlichkeit, aber
keine Bestimmtheit, ergibt, daß das
graphische Objekt 422 lokal verankert ist, weil möglicherweise
andere Programme oder Client-Agenten, die gemeinsam dieselbe persistente
Speicherung 120 benutzen können, das graphische Objekt 422 aus
der persistenten Speicherung 120 gelöscht haben (z.B. um Platz in
der persistenten Speicherung für
ein neues Objekt zu schaffen).
-
Genauer
gesagt und mit Bezug auf 4 und 5 durchsucht
der Server-Agent 118, wenn der Server-Agent 160 keinen
Index für
eine bestimmte Bitmap 422 in der Indextabelle 411 des
Servers finden kann, eine zweite Tabelle 418 (im folgenden "Fuzzy-Datenbank") nach einem Eintrag 419 (im
folgenden "Fuzzy-Schlüssel"), der mit der Bitmap 422 assoziiert
ist (Schritt 520). Bei einer Ausführungsform ist jeder Fuzzy-Schlüssel 419 eine
Kombination des eindeutigen Schlüssels 412 in
der Tabelle 411 des Servers und der Länge/Größe der assoziierten Bitmap 422.
Der Fuzzy-Schlüssel
kann zum Beispiel über
ein XOR (exklusiv-OR) beider zur Berechnung des eindeutigen 64-Bit-Schlüssels 412 in
der Tabelle 411 des Servers verwendeter 32-Bit-CRCs und
der Länge
der Bitmap 422, die mit dem eindeutigen Schlüssel 412 assoziiert
ist, gebildet werden. Die Fuzzy-Datenbank 418 liefert
im wesentlichen eine Anfangsvorhersage, ob in der persistenten Speicherung 120 des
Client eine Kopie der Bitmap 422 gespeichert ist. Wenn
die Fuzzy-Datenbank 418 den mit der Bitmap 422 assoziierten
Fuzzy-Schlüssel 419 nicht
enthält,
ist wahrscheinlich keine Kopie der Bitmap 422 in der persistenten
Speicherung 120 des Client gespeichert und der Server-Agent 160 muß deshalb
eine codierte Version der Bitmap 422 wie zuvor beschrieben
zu dem Client-Agenten 118 senden.
Wenn die Fuzzy-Datenbank 418 dagegen den Fuzzy-Schlüssel 419 für die Bitmap 422 enthält, besteht
eine große
Wahrscheinlichkeit, daß die
Bitmap 422 in der persistenten Speicherung 120 des
Client gespeichert ist.
-
Wenn
der Server-Agent 160 keinen Fuzzy-Schlüssel 419 in der Fuzzy-Datenbank 418 findet,
der mit der Bitmap 422 assoziiert ist, sendet der Server-Agent 160 genauer
gesagt eine codierte Bitmap (entsprechend der Bitmap 422)
zu dem Client-Agenten 118 mit einem Befehl der von dem
Client-Agenten 118 anfordert, die Bitmap 422 (oder
die entsprechende codierte Bitmap) in dem flüchtigen Speicher 114 zu
speichern (Schritt 530). Außerdem und wie oben beschrieben
fügt der
Server-Agent 160 den mit der Bitmap 422 assoziierten
Fuzzy-Schlüssel 419 zu
der Fuzzy-Datenbank 418 hinzu (Schritt 540). Man
beachte, daß die
Reihenfolge der Schritte 530 und 540 umgekehrt
werden kann, so daß die
Fuzzy-Datenbank 418 vor der Übertragung des Befehls und
der codierten Version der Bitmap 422 aktualisiert wird.
Der Client-Agent 118 kopiert danach die Bitmap 422 in
eine bestimmte Speicherstelle in dem flüchtigen Speicher 114 des
Client, wie durch den Server-Agenten 160 spezifiziert (Schritt 560).
-
Bei
einer Ausführungsform
wartet der Server-Agent 160 nicht, auf eine Bestätigung von
dem Client-Agenten 118, daß die mit der Bitmap 422 assoziierte
codierte Bitmap erfolgreich empfangen und verarbeitet wurde. Stattdessen
nimmt der Server-Agent 160 an, daß die codierte Bitmap ordnungsgemäß verarbeitet wurde,
und streamt weiter Protokollbefehle, ohne auf die Rückkehr einer
Bestätigungsnachricht
von dem Client-Agenten 118 zu warten. Der Server-Agent 160 verfolgt
jedoch die Anzahl der seit der letzten gelesenen Bestätigung ausgegebenen
Protokollbefehle. Der Server-Agent 160 blockiert die weitere Übertragung
von Protokollbefehlen, wenn die Anzahl eine vordefinierte Schwelle
erreicht. Die Schwelle ermöglicht
es dem Client-Agenten 118, eine obere Schranke für die Menge
an Speicher festzulegen, die notwendig ist, um ankommende Protokollbefehle
während
des Betriebs im Recovery-Modus in Warteschlangen einzureihen, wie
später ausführlicher
beschrieben wird.
-
Wenn
ein Fuzzy-Schlüssel 419 in
der Fuzzy-Datenbank 420 gefunden wird, sendet der Server-Agent 160 einen
Befehl zu dem Client 110, der den Client-Agenten 118 anweist,
die mit dem Fuzzy-Schlüssel 419 assoziierte
Bitmap 422 aus der persistenten Speicherung 120 des
Client in den flüchtigen
Speicher 114 des Client zu kopieren (Schritt 550).
Mit diesem Befehl geht nicht nur der Fuzzy-Schlüssel 419 einher,
der die interessierende Bitmap 422 eindeutig identifiziert,
sondern auch der assoziierte Index, der durch den Server-Agenten 160 (wie
zuvor beschrieben) erzeugt wird, um die spezifische Speicherstelle
in dem flüchtigen
Speicher 114 des Client zu identifizieren, die die kopierte
Bitmap 422 empfangen und speichern wird. Durch Kopieren der
Bitmap 422 in den flüchtigen
Speicher 114, statt einfach nur ihre Speicherstelle in
der persistenten Speicherung 120 zu behalten, kann die
Erfindung schnell auf mehrere Anforderungen, die Bitmap 422 zu
zeichnen, die in schneller Abfolge oder ohne viel dazwischentretende
Cache-Aktivität
empfangen werden, reagieren, indem die Bitmap 422 beim
Auftreten der ersten Anforderung kopiert wird.
-
Wenn
die Bitmap 422 trotz der Anwesenheit des entsprechenden
Fuzzy-Schlüssels 419 in
der Fuzzy-Datenbank 418 gerade
nicht in der persistenten Speicherung 120 gespeichert ist,
gibt der Client-Agent 118 (als Reaktion auf den zuvor von
dem Server-Agenten 160 ausgegebenen "CACHE READ DISK OBJEKT"-Befehl) eine Nachricht
an den Server-Agenten 160 zurück, die anzeigt, daß die Bitmap 422 fehlt.
Nach Empfang dieser Nachricht sendet der Server-Agent 160 die
mit der Bitmap 422 assoziierten codierten Bitmapdaten neu
zu dem Client-Agenten 118 (Schritt 530). Man beachte,
daß der
Server-Agent 160 eine sequenzielle Liste aller solchen
CACHE READ DISK OBJEKT-Befehle führt,
die zu dem Client-Agenten 118 gesendet werden, für die der
Server-Agent 160 noch keine Bestätigung empfangen hat, so daß der Server-Agent 160 eine empfangene
Bestätigung
ordnungsgemäß mit einer
bestimmten Bitmap 422 assoziieren kann (um so die codierte
Bitmap, die übertragen
werden muß,
ordnungsgemäß zu identifizieren).
-
In
der Zwischenzeit tritt der Client-Agent 118 in einen Recovery-Modus
ein, in dem der Client-Agent 118 weiter den ankommenden
Protokollstrom liest, ihn aber nicht verarbeitet. Stattdessen konstruiert
der Client-Agent 118 eine Warteschlange zum Empfangen des
Befehlstroms der nach dem Befehl, der die Bitmap 422 nicht
in der persistenten Speicherung 120 finden konnte, aus
dem Server 150 fließt.
Der Client-Agent 118 speichert diese Befehle weiter in
dieser Warteschlange im FIFO-Verfahren
(first in, first out), bis die codierte Bitmap empfangen und erfolgreich
decodiert wurde, um die Bitmap 422 zu erzeugen. Um die
fehlende Bitmap 422 in dem ankommenden Befehlsstrom zu
erkennen, schaut der Client-Agent 118 nach graphischen
Daten, die eine Recovery-Markierung in dem Protokollstrom begleiten.
Bei einer Ausführungsform
ist die Recovery-Markierung eine bestimmte Pseudozufallszahl, die
mit dem eindeutigen Schlüssel
der Bitmap 422 (d.h. der 64-Bit-CRC und 32-Bit-Länge) XOR-verknüpft wird.
Der Server-Agent 160 erzeugt
nach Empfang einer Nicht-Bestätigungs-Nachricht
von dem Client-Agenten 118 die Recovery-Markierung. Wenn
die Bitmap 422 ankommt, speichert der Client-Agent 118 sie
in seinem flüchtigen
Speicher 114 (Schritt 560) (d.h. worin die Bitmap 422 gespeichert
worden wäre,
wenn das Objekt anfänglich
in der persistenten Speicherung 120 anwesend gewesen wäre) und
beginnt mit der Verarbeitung der Befehle in der Warteschlange. Nach
der Verarbeitung aller Befehle in der Warteschlange nimmt der Client-Agent 118 die
Verarbeitung des ankommenden Stroms von Protokollbefehlen, der über das
Netzwerk 140 von dem Server 150 ankommt, wieder
auf.
-
Ein
Vorteil des oben beschriebenen Recovery-Prozesses besteht darin,
daß er
die Zeitverzögerungskosten
vermeidet, die in Cache-Systemen auftreten, die die Befehle in der
Pipeline beim Auftreten einer Cache-Verfehlung flushen. Außerdem verursacht
der Recovery-Prozeß keine
Unterbrechung des Protokollbefehlsstroms und auch keine Zunahme
des Verkehrs auf dem Kanal um mehr als einige wenige Byte mehr als der
Server 150 zu dem Client 110 gesendet hätte, wenn
der Server-Agent 160 zu Anfang gewußt hätte, daß die Bitmap 422 nicht
in der persistenten Speicherung 120 vorlag.
-
Bei
einer Ausführungsform
ermöglicht
die vorliegende Erfindung das Finden der Bitmap 422 in
der persistenten Speicherung 120 des Client durch Speichern
der Bitmap 422 in einer Datei, deren Dateiname gebildet
wird, indem der Fuzzy-Schlüssel 419 zusammen
mit den mit der Bitmap 422 assoziierten vor längster Zeit benutzten
und/oder am wenigsten häufig
verwendeten Informationen codiert wird. Auf diese Weise liefert
der Dateiname selbst die gewünschten
Informationen und vermeidet somit, die Datei öffnen und lesen zu müssen. Die
Codierung des Fuzzy-Schlüssels 419 als
Teil des Dateinamens der Bitmap ermöglicht es dem Client-Agent 118 außerdem,
schnell die Fuzzy-Schlüssel-Informationen
aus dem Dateinamen zu extrahieren und sie während eines anfänglichen
Booten des Client 110 oder am Anfang der Client/Server-Sitzung
zu dem Server-Agenten 160 zu senden. Die extrahierten Fuzzy-Schlüssel können in
einer Reihenfolge zu dem Server 150 übertragen werden, die zum Beispiel
auf den vor längster
Zeit benutzten und/oder am wenigsten häufig benutzten Informationen
basiert, die auch Teil des Dateiennamens bilden.
-
Bei
einer Ausführungsform
werden Fuzzy-Schlüssel 419 auf
eine von drei Weisen zu der Fuzzy-Datenbank 418 hinzugefügt oder
aus dieser gelöscht.
Erstens sendet beim Herauffahren des Client-Agenten 118 oder
bei der Herstellung einer Client-Server-Sitzung mit dem Server-Agenten 160 der
Client-Agent 118 Befehle zu dem Server-Agenten 160, um einen Fuzzy-Schlüssel 419 für jede entsprechende
Bitmap 422 in der persistenten Speicherung 120 des
Client zu der Fuzzy-Datenbank 418 hinzuzufügen (die
Fuzzy-Schlüssel
kommen zusammen mit den Befehlen des Client-Agenten). Der Client-Agent 118 kann
eine Sendeliste führen,
die eine Reihenfolge (z.B. auf der Basis der aus vorherigen Client-Server-Sitzungen bestimmten
zuletzt benutzten oder am häufigsten
benutzten Informationen) für
das Senden von Fuzzy-Schlüsseln
beim Herauffahren zu dem Server 150 spezifiziert. Die Sendeliste
kann durch den Client-Agenten
118 beim Lesen des Verzeichnisses seiner persistenten Speicherung 120 und
beim Führen
einer Repräsentation
des Verzeichnisses in dem flüchtigen Speicher 114 gebildet
werden. In einem Aspekt der Erfindung extrahiert der Client-Agent 118 Fuzzy-Schlüsselinformationen
aus dem Dateinamen der Datei, die die Bitmap 422 enthält, wenn
die Repräsentation
des Verzeichnisses erstellt wird. Zweitens fragt der Client-Agent 118 in
vorbestimmten Abfrageintervallen seine persistente Speicherung 120 ab,
um die Bitmaps zu bestimmen, die sich gerade in seiner persistenten
Speicherung 120 befinden (z.B. durch Suchen nach Dateinamen,
die eine Fuzzy-Schlüssel-artige
Struktur enthalten) und sendet je nachdem, wie es notwendig ist,
um die Fuzzy-Datenbank 418 des Servers zu aktualisieren,
Hinzufüge-
und/oder Löschbefehle
zu dem Server-Agenten 160. Wenn der Server-Agent 160 einen
Befehl zu dem Client-Agenten 118 zum Schreiben einer Bitmap
in die persistente Speicherung 120 des Client sendet, erzeugt der
Server-Agent 160 drittens einen entsprechenden Fuzzy-Schlüssel 419 und
speichert ihn in der Fuzzy-Datenbank 418.
-
Die Übertragung
von Bitmap-Daten aus dem Server 150 zu dem Client 110 kann
einen relativ großen Zeitraum
in Anspruch nehmen, insbesondere wenn die Netzwerkverbindung zwischen
Client und Server relativ langsam ist. Bei einer Ausführungsform
paßt die
Erfindung die Funktionsweise des Servers an sich ändernde Netzwerkbedingungen
an, indem die relative Geschwindigkeit des Netzwerks 140 bestimmt
wird. Indem zum Beispiel dynamisch die Bandbreite des Netzwerks 140 bewertet
wird, kann der Server-Agent 160 die Codierungs- und Komprimierungstechniken
modifizieren, mit denen Bitmap-Daten verarbeitet werden, um Bandbreitenanforderungen
zu verringern, wenn über
ein langsames Netzwerk übertragen
wird. Die Erfindung verarbeitet Spalten von Bitmapdaten von links
nach rechts und bereitet den Client-Cache 114 entsprechend
vor. Während
die codierte Bitmap 414 übertragen wird, kann die Übertragungszeit überwacht
werden, um die Leistungsfähigkeit
des Netzwerks 140 zu bestimmen. Wenn die Übertragungszeit
einen Schwellenwert überschreitet, kann
der Client-Agent 118 jegliche Bitmap-Daten, die bereits
in seinem fache 114 gespeichert wurden, entnehmen und die übrigen Teile
der Bitmap-Daten entweder in Echtzeit, während sie in dem Cache 114 empfangen werden,
oder in vorbestimmten Intervallen anzeigen. Auf diese Weise erkennt
ein Benutzer des Client, daß der Client 110 immer
noch an den Bitmapdaten operiert, und kann sehen, daß sich der
Client 110 nicht in einem hängengebliebenen oder ausgefallenen
bzw. Fehlerzustand befindet. Durch Approximieren der effektiven Netzwerkbandbreite
zu dem Client 110 und entsprechendes Anpassen des Verhaltens
des Servers 150 kann der Server-Agent 160 zum
Beispiel den Client-Agenten 118 anweisen, eine gesamte
Bitmap zu benutzen, gegenüber
der Verwendung eines Ganzspaltenmodus der Anzeige für eine bestimmte
Bitmap.
-
Genauer
gesagt sendet der Server-Agent 160 einen Start_StopWatch-Befehl,
dem codierte Bitmapdaten 414 und ein Stop_StopWatch-Befehl
folgen, zu dem Client-Agenten 118.
Der Client-Agent 118 reagiert auf den Start_StopWatch-Befehl,
indem er den aktuellen Zeittick liest und ihn in ein erstes Arrayelement
schreibt. Nachdem die codierte Bitmap 414 empfangen wurde,
reagiert der Client-Agent 118 auf den Stop_StopWatch-Befehl, indem er
den aktuellen Zeittick liest und ihn in ein zweites Arrayelement
schreibt. Ein Vergleich der Zeittickdifferenz zwischen den Befehlen
Start_StopWatch und Stop_StopWatch liefert eine Schätzung der
Zeit, die damit verbracht wurde, die codierten Bitmapdaten zu empfangen.
Die resultierende Zeitdifferenz wird dann zu dem Server-Agenten 160 zurückgesendet.
Diese Prozedur kann wiederholt werden, um einen geglätteten gleitenden
Mittelwert zu berechnen, aus dem eine vernünftige Schätzung des effektiven Durchsatzes
der codierten Bitmapdaten bestimmt werden kann. Die Erfindung verwendet
diese Durchsatzschätzung
im Hinblick auf die Größe der codierten
Daten für
eine bestimmte Bitmap, um zu entscheiden, ob der Ganzbitmapmodus
(z.B. wenn es wahrscheinlich weniger als 5 Sekunden in Anspruch
nehmen wird) oder progressive Ganzspalten (z.B. wenn es wahrscheinlich
mehr als 5 Sekunden dauern wird) benutzt werden soll. Man beachte,
daß, obwohl
diese Prozedur nicht zur einer 100% genauen Durchsatzschätzung führt, sie
genug Granularität
ergibt, um schnelle oder langsame Netzwerkverbindungen zu erkennen,
aus denen verschiedene Anzeigemodi bestimmt werden können. Mit
einer ähnlichen
Technik kann man große
Schirm-zu-Schirm-Kopien
am Client-Ende timen und eine ähnliche
gleitende Mittelwertschätzung
der Leistungsfähigkeit
des Client während
dieser Operationen aufbauen, mit dem man dann einen Produzenten-Thread
auf dem Server 150 verlangsamen und einen Überlauf
an der Quelle verhindern kann, wenn der Server 150 Daten
schneller erzeugt, als der Client 110 sie bearbeiten kann.
-
Bei
einer Ausführungsform
bildet die Erfindung Objekte, die groß genug sind, um die Daten
einer gesamten Cache-Spalte
zu enthalten. Zum Beispiel kann der Server-Agent 160 die
maximale Objektgröße und die
Größe des Cache
beim Herauffahren der Client-Server-Sitzung als Funktion der Größe des Verbindungsfensters
und seiner Farbtiefe wählen,
wobei den größeren Schirmen
und Tiefen größere Größen zugeteilt
werden. Ferner können
derzeitige Techniken zum Zerlegen einer Bitmap in Spalten zu Spalten
von weniger als Standardbreite an einem oder beiden Enden der Bitmap
führen.
Wenn diese nicht dem Standard entsprechenden Spalten zu schmal sind,
sind sie möglicherweise
nicht groß genug,
um in der persistenten Speicherung 120 des Client behalten
zu werden und sind somit während
nachfolgenden Client/Server-Sitzungen in dem Client 110 nicht
vorhanden. Die Erfindung vermeidet dieses Problem durch Zusammenführen der
schmalen Spalten mit benachbarten Spalten, so daß nur breite Spalten verwendet
werden und somit alle Teile zum Beispiel eines Splash-Schirms in
der persistenten Speicherung 120 enthalten sein werden.
Bei einer Ausführungsform werden
ganze Spalten dann in zwei Phasen angezeigt. Die erste Phase bereitet
den Cache 114 mit etwaigen fehlenden Daten vor und die
zweite Phase entnimmt die Spalte aus dem Cache 114, wobei
möglicherweise mehr
als ein Cache-gespeichertes Objekt verwendet wird. Die Spalte wird
deshalb auf atomische Weise auf dem Anzeigeschirm 128 angezeigt.
Wie bereits besprochen können,
wenn die Netzwerkverbindung langsam ist, die Spalten einzeln atomisch
angezeigt werden, um dem Benutzer an dem Client 110 zu
versichern, daß das
System noch arbeitet. Als Alternative kann die gesamte Bitmap atomisch
unter Verwendung einer ähnlichen
Technik angezeigt werden, wenn eine schnelle Netzwerkverbindung
erkannt wird.
-
Die
oben besprochene Technik der Schätzung
des gleitenden Mittelwerts kann auch zur Abschwächung von seit langem existierenden Überrollproblemen
in einer Anwendung benutzt werden die auf einem schnellen Server
ausgeführt
und auf einem relativ langsamen Client angezeigt wird. Das Überrollproblem
entsteht zum Beispiel, wenn ein Benutzer des Client 110 mehrere
Rollbefehle einleitet, wie zum Beispiel durch mehrmaliges Anklicken
des Rollbalkens (oder Ziehen des Rollbalkens) mit einer Maus 126.
Während
die Rollbefehle zu dem schnellen Server gesendet werden, führt der
Server 150 die Rolloperationen aus und gibt die assoziierten
Daten schneller zurück,
als der langsame Client 110 (oder das langsame Netzwerk 140)
die Ergebnisse auf seinem Anzeigeschirm 128 anzeigt. Wenn
der Benutzer an dem Client 110 letztendlich die gewünschte Schirmposition
sieht und mit dem Rollen aufhören
möchte
(durch Stoppen der Mausklicke und/oder des Ziehens des Rollbalkens)
rollt die Anzeige folglich weiter über die gewünschte Schirmposition hinaus.
Diese Überrollbedingung
tritt auf, weil der schnelle Server 150 bereits die Rollbefehle
verarbeitet und die entsprechenden Daten zu dem Client 110 zurückgesendet
hat, aber die Daten in dem langsamen Client in Warteschlangen eingereiht
und noch nicht vollständig
verarbeitet wurden.
-
Die
Erfindung schwächt
dieses Überrollproblem
ab, indem seine Häufigkeit
verringert wird. Genauer gesagt mißt die Erfindung periodisch
die Zeit gewählter
Rollereignisse in dem Server 150 (durch Rollen des Rahmenpuffers)
und in dem Client 110 (über
die oben besprochenen StopWatch-Befehle), um eine gleitende Mittelwertschätzung ihrer
jeweiligen Geschwindigkeiten zu berechnen. Auf diese Weise schätzt der
Server-Agent 160, wie lange ein bestimmtes Rollereignis
dauern wird (Geschwindigkeit mal Anzahl beteiligter Pixel), um in
dem Server 150 verarbeitet zu werden, und wie lange erwartet
wird, daß der
Client 110 braucht und wenn die erwartete Verarbeitungszeit
in dem Client 110 größer als
die des Servers 150 ist, wird die Serververarbeitung um
die entsprechende Zeitdifferenz suspendiert, um so Client 110 und
Server 150 im wesentlichen im Gleichschritt zu halten.
Dieser Ansatz führt
zu viel weniger Überrollereignissen
aufgrund der Zeitverzögerung
zwischen Client 110 und Server 150 im Vergleich
zu der Anzahl von Überrollereignissen,
wenn dieser Ansatz nicht implementiert wird.
-
Zusätzlich zu
dem Manipulieren von Bitmapdaten kann die vorliegende Erfindung
auch eine auf dem Server 150 erzeugte Textzeichenkette
zu der Anzeige 128 des fernen Client 110 remoten.
Mit Bezug auf 6 führt der Server 150 das
Anwendungsprogramm 158 aus, das eine Textzeichenkette erzeugt,
die zu dem Client 110 remotet werden muß. Der Server-Agent 160 fängt die
aus dem Anwendungsprogramm 158 zu dem Serverbetriebssystem 156 gesendeten
Befehle ab, die die Textzeichenkette betreffen und bewirkt, daß ein Anzeigetreiber 612 des
Server-Agenten 160 die textbezogenen Informationen verarbeitet
und eine Reihe von Protokollbefehlen 614 zur Anzeige einer
Textzeichenkette 416 auf dem Display 128 des Client
zu dem Client-Agenten 118 sendet. Zum Beispiel führt die
Anwendung 158 Prozeduraufrufe durch, die Textfarbe und
Hintergrundfarbe setzen (hier "Hello!"). Die Ausführung der
TextOut-Prozedur 618 durch die Anwendung 158 triggert
die Ausführung
der DrvTextOut-Prozedur 620 des Anzeigetreibers 612.
Wie gezeigt, definiert die DrvTextOut-Prozedur 620 die
Clip-Region, das Grenzrechteck und den Textmodus (einschließlich Hintergrund-
und Textfarbe) durch Ausführen
einer Sequenz entsprechender Prozeduren.
-
Die
Ausführung
solcher Prozeduren bewirkt, daß der
Anzeigetreiber 612 die entsprechenden Daten und Protokollbefehle
(wie zum Beispiel eine Teilmenge der in der Tabelle 1 angegebenen)
zu dem Client-Agenten 118 sendet. Die Protokollbefehle
werden durch den Client- Agenten 118 empfangen
und verarbeitet, der Prozeduren 614 ausführt, die
die Clip-Region, das Grenzrechteck, den Textmodus und das mit jedem
anzuzeigenden Textzeichen assoziierte Glyph spezifizieren. Man beachte,
daß das
mit einem Glyph-Objekt assoziierte Protokoll nicht nur die Glyph-Bitmap
selbst codiert, sondern auch seine relativen Positionierungsinformationen. Der
Server 150 kann außerdem
andere Protokollbefehle zu dem Client-Agenten 118 senden,
die den Client-Agenten 118 anweisen, die assoziierten Glyphe
wie zuvor beschrieben in dem flüchtigen
Speicher 114 und/oder in der persistenten Speicherung 120 zu
speichern. Der Client-Agent 118 erzeugt eine Bitmap entsprechend
der Größe des Grenzrechtecks,
das die Textzeichenkette umgibt, und setzt die relativen Positionen jedes
Glyph an seiner richtigen Position in dem Grenzrechteck. Nachdem
das letzte Glyph empfangen und seine Position gesetzt wurde, weist
der Client-Agent 118 das Client-Betriebssystem 116 an, die
Bitmap auf dem Anzeigeschirm 128 des Client 110 zu
zeichnen bzw. wiederzugeben.
-
Die
vorliegende Erfindung unterstützt
außerdem
mehrere verschiedene Beschreibungen von Wegen (einer Menge von Linien
oder Kurven, die als Teil der Beschreibung einer Linienzeichnungsoperation
oder im Fall eines geschlossenen Weges zur Beschreibung einer Region
verwendet wird), einschließlich
Ellipsen, Beziers, Segmente, Streifen und Stile. Segmente bedeuten
Liniensegmente, die bei Kombination einen Weg bilden. Ähnlich können Segmente
weiter zu Streifen analysiert werden, die Teile des Liniensegments
(entsprechend einer Reihe aufeinanderfolgender Pixel) sind, die
dieselben Winkeleigenschaften aufweisen. Die zum Repräsentieren
von Streifen verwendete Codierungstechnik verwendet zum Beispiel
relative Positionsinformationen und quantisierte Winkel zur Charakterisierung
aufeinanderfolgender Streifen in bestimmten Liniensegmenten wodurch
nicht nur die Menge an zu codierenden graphischen Liniendaten minimiert
wird, sondern auch eine besser wiederholbare Sequenz von Daten entsteht,
die effizienter komprimiert werden kann. Die Zunahme der Wiederholbarkeit
wird besonders verstärkt,
wenn Streifen repräsentiert
werden, die eine Form wie zum Beispiel ein Rechteck oder einen Kreis
bilden. Das für
Streifen verwendete Protokoll ermöglicht es außerdem dem
Client-Agenten 118, genau einen Weg unabhängig und
ohne Kenntnis des vom Server-Agenten 160 zum
Umsetzen des Weges in eine Sequenz von Pixeln verwendeten Algorithmus
zu reproduzieren.
-
Mit
Bezug auf das nicht einschränkende
Beispiel in 7A umfaßt ein Weg 700 zwei
Liniensegmente 710, 720, die scheinbar perfekt
linear sind. Für
Fachleute ist jedoch erkennbar, daß Liniensegmente, die nicht perfekt
horizontal, vertikal oder in einem Winkel von 45 Grad diagonal sind,
durch eine entsprechende Reihe von Streifen approximiert werden
müssen,
wenn der Weg 700 auf einem Anzeigeschirm 128 angezeigt
wird (1). Diese Approximation ist notwendig, weil die
einzelnen Pixel auf dem Anzeigeschirm 128 von höchstens
acht anderen Pixeln umgeben werden, die entweder perfekt horizontal,
vertikal oder in einem Winkel von 45 Grad zueinander liegen, und
somit müssen
jegliche Liniensegmente 710, 720, die in einem
anderen Gesamtwinkel liegen, durch eine Reihe von Streifen approximiert
werden. Folglich und mit Bezug auf den Beispielweg 700 von 7B besteht
das Segment 710 aus vier Streifen 712, 714, 716, 718,
wobei die einzelnen Pixel (durch Quadratblöcke abgebildet) jedes Streifens 712, 714, 716, 718 in
45 Grad-Diagonalen relativ zueinander organisiert sind, und das
Segment 720 besteht aus fünf Streifen 722, 724, 726, 728, 730,
wobei die einzelnen Pixel jedes Streifens 722, 724, 726, 728, 730 relativ
zueinander horizontal organisiert sind.
-
Bei
einer Ausführungsform
und mit Bezug auf 7B und 8A analysiert
der Server-Agent 160 den Weg 700 zu Liniensegmenten 710, 720 jeweils
mit einer bestimmten Länge
und einem bestimmten Winkel (Schritt 810). Dann wird ein
Array von Liniensegmenten gebildet, um quantisierte Segmentinformationen
(die im folgenden als quantisierter Winkel oder "QA" bezeichnet
werden) für
jedes Liniensegment 710, 720 zu speichern (Schritt 820).
Auch mit Bezug auf 8B bestimmt der Server-Agent 160,
statt den mit einem bestimmten Segment 710, 720 assoziierten
Absolutwinkel zu berechnen, stattdessen in welchem der 16 quantisierten Winkeln 880 der
Absolutwinkel liegt. Die Quantisierungstechnik bestimmt, in welchem
Sechzehntel der Umrandung der Endpunkt für ein in der Mitte eines Kreises
beginnendes Liniensegment (ein Radius) liegt. Diese Informationen
können
als das vorzeichenlose Delta aus dem letzten in diesem Kontext spezifizierten
Segment ausgedrückt
werden (mod 16, initialisiert auf 0). Diese Technik führt zu einer
besser wiederholbaren Sequenz (als bei Verwendung des Absolutwinkels),
insbesondere, wenn die Segmente eine Form wie etwa ein Rechteck oder
einen Kreis bilden.
-
Der
Server-Agent 160 analysiert jedes Liniensegment 710, 720 dann
zu Streifen (712, 714, 716, 718 bzw. 722, 724, 726, 728, 730)
(Schritt 830). Die Länge
jedes Streifens eines bestimmten Segments 710, 720 wird
danach zur weiteren Verarbeitung in einem Streifenmengenarray gespeichert
(Schritt 840). Bei einer Ausführungsform wird der Algorithmus
bLine von Windows NT verwendet, um den Weg 700 in ein Array
von Streifen zu zerlegen. Der NT-Algorithmus bestimmt den quantisierten
Winkel jedes Streifens und Segments dergestalt, daß mit Segmenten
oder Streifen, die auf einer Grenze zwischen quantisierten Winkelregionen
liegen, keine Mehrdeutigkeit assoziiert ist. Der NT-Algorithmus schlägt eine
nach oben gehende Linie vertikal so um, daß die Linie immer nach unten
geht (der y-Wert nimmt immer weiter zu) und setzt das Flag FL_FLIP_V. Ähnlich wird
eine nach links gehende Linie so horizontal umgeschlagen, daß sie immer
nach rechts geht (der x-Wert nimmt immer weiter zu) und setzt das
Flag FL_FLIP_H. Folglich fällt
das von diesem Algorithmus ausgegebene Array von Streifen in einen
einzigen Quadranten. Bei dieser konkreten Ausführungsform macht der Server-Agent 160 die
Umschlageoperation des NT-Algorithmus rückgängig, so daß das Array von Streifen wieder
auf seine vorherigen/ursprünglichen
quantisierten Winkel zurück
umgeschlagen wird, um sicherzustellen, daß der Endpunkt eines vorherigen
Streifens und der Startpunkt des nächsten nachfolgenden Streifens
zusammenfallen, um so zu vermeiden, die Startkoordinate des nächsten nachfolgenden
Streifens senden zu müssen.
-
Der
Server-Agent 160 codiert dann die Anfangskoordinate des
Weges 700 zusammen mit den quantisierten Winkeldaten in
dem Liniensegmentarray und den Pixellängendaten in dem Streifenlängenarray
zur Bildung eines Protokollstroms (Schritt 850). Die codierten
Daten werden dann einem Komprimierungsalgorithmus unterzogen, um
die Datenredundanzen in dem Protokollstrom auszunutzen (Schritt 860),
und die komprimierten graphischen Liniendaten werden danach zur
Decodierung und weiteren Verarbeitung zu dem Client-Agent 118 übertragen
(Schritt 870).
-
Mit
Bezug auf die beispielhafte Darstellung in 9 und die
quantisierten Winkelinformationen von 10 umfaßt das Liniensegment 710 vier
Streifen 712, 714, 716, 718,
die in dem quantisierten Winkel 1 positioniert sind. Die
Anfangskoordinate des Weges 700, die aus dem Server-Agenten 160 zu
dem Client-Agenten 118 als Teil der komprimierten graphischen
Liniendaten übertragen
werden entspricht dem ersten Pixel in dem Streifen 712 (positioniert
am Ursprung von 880). Die graphischen Liniendaten enthalten
ferner die Pixellänge jedes
Streifens 712, 714, 716, 718 in
dem Segment 710. Da das Segment 710 nicht einer
perfekt horizontalen, vertikalen oder in einem Winkel von 45 Grad
liegenden Diagonalen entspricht, wird jeder nachfolgende Streifen 714, 716 und 718 in
dem Segment 710 wie in 10 angegeben
um einen bestimmten Deltawert eingestellt, um den Gesamtwinkel des
Segments 710 richtig zu approximieren. Um in dem vorliegenden
Beispiel von dem letzten Punkt in dem vorherigen Streifen 712 zu
dem Anfangspunkt des nächsten
nachfolgenden Streifens 714 zu gelangen, zeigt der Client-Agent 118 den
Streifen 714 mit im wesentlichen demselben x-Wert und einem
zunehmenden y-Wert an. Dieser Prozeß wird für jeden Streifen in dem Segment 710 sowie
für die Streifen
in dem Segment 720, die in QA 15 positioniert sind, wiederholt.
-
Folglich
und bei einer Ausführungsform
umfaßt
der durch die vorliegende Erfindung bei der Verarbeitung von Streifen
erzeugte Protokollstrom die Startposition des Weges, einen (etwaigen)
Index, der einer Speicherstelle in dem flüchtigen Speicher 114 des
Client (1) entspricht, die möglicherweise
bereits einen zu einem früheren
Zeitpunkt in der Client-Server-Sitzung übertragenen bestimmten Streifen,
die Anzahl der Segmente in dem Weg, den quantisierten Winkel jedes
Segments (woraus die in 10 wiedergegebenen
Deltawerte bestimmt werden), die Länge jedes Streifens zusammen
mit bestimmten Steuerinformationen und quantisierte Winkeldeltainformationen
speichert, die zu dem quantisierten Winkel eines ersten oder vorherigen
Segments hinzugefügt
werden, um den Client-Agenten 118 über den quantisierten Winkel
nachfolgender Segmente zu informieren. Auf diese Weise vermeidet
die Erfindung, daß Koordinaten-
und Absolutwinkelinformationen für
jeden Streifen in dem Weg gesendet werden müssen. Ferner ermöglicht die
oben besprochene Streifenverarbeitungstechnik ein effizientes Komprimieren
von graphischen Liniendaten durch Verstärken der sich wiederholenden
Beschaffenheit der Daten in dem unkomprimierten Protokollstrom.
-
Die
vorliegende Erfindung kann auch auf Bitmaps angewandt werden, die
in einer On-Screen-Oberfläche
angezeigt werden, sowie auf Bitmaps in einer Off-Screen-Oberfläche (die z.B. in dem Speicher
eines Videoanzeigeadapters und/oder in einem im voraus zugeteilten
Teil des flüchtigen
Speichers 114 des Client, an dem eine Graphikumsetzungsbibliothek
operieren wird, gespeichert sind). Off-Screen-Oberflächen werden häufig von
Anwendungen wie etwa Microsoft Word gebildet, die Bitmaps in die
Off-Screen-Oberfläche schreiben,
bis die Oberfläche
vollständig
ist, woraufhin die Off-Screen-Oberfläche auf dem Anzeigeschirm 128 des Client 110 in
endgültiger
Form als eine On-Screen-Oberfläche
angezeigt wird. Deshalb liefern die Off-Screen-Oberflächen häufig die
Quelle für
On-Screen-Oberflächen.
-
Bei
einer Ausführungsform
und mit Bezug auf Off-Screen-Oberflächen informiert
der Client-Agent 118 den Server-Agenten 160 über die
Menge an lokalem flüchtigem
Speicher 114, der für
Off-Screen-Oberflächen verfügbar ist,
so daß der
Server-Agent 160 keine Off-Screen-Oberfläche bildet, die größer als
der verfügbare Speicher
des Client ist. Der Server-Agent 160 bildet danach eine
Off-Screen-Oberfläche
und sendet sie zu dem Client-Agenten 118 zusammen mit Anweisungen
zum Speichern der Oberfläche
in seinem flüchtigen Speicher 114.
Der Client-Agent 118 wählt
einen bestimmten Teil seines flüchtigen
Speichers 114 und teilt ihn der Oberfläche zu und speichert die Oberfläche darin.
Jede Off-Screen-Oberfläche
besitzt eine Menge assoziierter Attribute, wie zum Beispiel eine
Kennung, die eindeutig Oberfläche,
Pixelformat, Abmessungen, Zeichnungsattribute, Protokollzustand
usw. identifiziert.
-
Um
den flüchtigen
Speicher 114 des Client effizient zu nutzen, kann der Server-Agent 160 bei
einer Ausführungsform
Befehle an den Client-Agenten 118 ausgeben, die anweisen,
daß bestimmte
Operationen an der Off-Screen-Oberfläche nur dann ausgeführt werden,
wenn die Off-Screen-Oberfläche
mit der On-Screen-Oberfläche in Wechselwirkung
tritt (z.B. beim Aktualisieren der On-Screen-Oberfläche mit
Bitmapdaten aus der Off-Screen-Oberfläche). Wenn die einzige Interaktion
zwischen der On-Screen-Oberfläche
und der Off-Screen-Oberfläche
eine endgültige
Kopie auf dem Bildschirm ist, können
die Operationen an die On-Screen-Oberfläche gerichtet
werden und somit die Menge an Bitmapdaten, die über das Netzwerk 140 übertragen
werden muß,
reduzieren. Alternativ dazu kann die Quelle der On-Screen-Oberfläche darauf
beschränkt
werden, entweder einer abgesetzt im Server 150 gespeicherten
Off-Screen-Oberfläche
zu entsprechen oder einer lokal in dem Client 110 gespeicherten
Off-Screen-Oberfläche.
Typische Operationen an der Off-Screen-Oberfläche, die der Server-Agent 160 anfordert,
sind zum Beispiel das Aktualisieren der Bitmap in der Off-Screen-Oberfläche mit
aktualisierten Text-, Linien- oder anderen Daten.
-
Bei
einer Ausführungsform
und mit Bezug auf 11 fängt der Server-Agent 160 Aufrufe
an das Server-Betriebssystem 156 im
Bezug auf die Erzeugung einer Off-Screen-Oberfläche ab und der Server-Agent 160 bildet
ein Duplikat der Oberfläche
und speichert sie zusammen mit ihren Attributen in dem lokalen Speicher
des Servers. Der Server-Agent 160 gibt dann einen Befehl
zum Bilden der Off-Screen-Oberfläche
in dem flüchtigen
Speicher 114 des Client an den Client-Agenten 118 aus (Schritt 1102).
Den Befehl begleitet eine codierte Repräsentation der Off-Screen-Oberfläche, wenn
es sich dabei um die erste Instanz der Off-Screen-Oberfläche handelt,
oder ein Index oder Fuzzy-Schlüssel, wenn
die Off-Screen-Oberfläche
zuvor während
der Client-Server-Sitzung übertragen
wurde (Schritt 1104). Der Server-Agent 160 weist den Client-Agenten 118 an,
die durch die Index-/Fuzzy-Schlüssel-Indizia
oder codierte Oberfläche
identifizierten graphischen Daten in die Off-Screen-Oberfläche des
Client zu integrieren (Schritt 1106). Der Client-Agent 118 reagiert
auf die Anweisungen des Server-Agenten, indem er die identifizierte
Oberfläche
bzw. Bitmap in die Off-Screen-Oberfläche des Client kopiert (Schritt 1108).
Wenn ein von dem Server-Agenten 160 ausgegebener BITBLT-Befehl
zum Beispiel zur Bildung einer Bitmap in der Off-Screen-Oberfläche des
Client erfolglos bleibt, wenn zum Beispiel ein Speicherzuteilungsfehler
auftritt, sendet der Client-Agent 118 einen C2S_OSS_Error-Befehl
zu dem Server-Agenten 160, der den erfolglos-Zustand anzeigt
(Schritt 1110). Als Reaktion auf den Fehlerzustand verwendet
der Server-Agent 160 seine lokale Kopie der Off-Screen-Oberfläche als
Quelle zur Aktualisierung der Off-Screen-Oberfläche des Client. Der Client-Agent 118 aktualisiert
mit den aus der lokalen Kopie des Servers empfangenen Informationen
die Off-Screen-Oberfläche
auf dem Client 110 und korrigiert etwaige verfälschte/verunreinigte
Regionen der Off-Screen-Oberfläche.
Alternativ dazu sendet der Server-Agent 160, wenn ein Fehlerzustand
angetroffen wird, seine lokale bzw. Duplikatkopie der Off-Screen-Oberfläche (Schritt 1112)
zu dem Client-Agenten 118 und weist den Client-Agenten 118 an,
die Duplikatoberfläche
als Quelle zur Aktualisierung der On-Screen-Oberfläche des
Client zu verwenden und die verfälschte
Off-Screen-Oberfläche im Client
zu verwerfen (Schritt 1114).
-
Obwohl
die vorliegende Erfindung mit Bezug auf spezifische Einzelheiten
beschrieben wurde, ist nicht beabsichtigt, daß diese Einzelheiten als Einschränkung des
Schutzumfangs der Erfindung betrachtet werden, außer soweit
sie in den beigefügten
Ansprüchen
enthalten sind.