Was macht stub auf der Serverseite? Und was ist ein Skelett ?
Dies ist ein Diagramm aus Wikipedia. Ich habe stub sowohl auf dem Server als auch auf dem Client installiert. Ich verstehe, dass Stub bei der Vernetzung auf der Client-Seite hilft, aber was macht Stub auf der Server-Seite?
Auch in der obigen Abbildung, was bedeutet Skelett?
schauen Sie sich das folgende Bild an:
Kurz gesagt: Stub und Skeleton sind Gegenstücke in einem Webservice-Setup. Skeleton belongs to service provider side
und stub belongs to receiver side
. Auf der unteren Ebene kommunizieren Stub und Skelett miteinander.
Auf der Clientseite kommunizieren die Geschäftsobjekte mit Stub-Objekten, und Stub übernimmt die Verantwortung von der Nachricht und ruft den Web-Service auf. Wenn der Aufruf abgeschlossen ist, ist das Skelett auf der Seite des Service Providers das parallele Objekt für die Stub-Funktion, und es empfängt die Anforderungsnachricht, versteht diese und leitet die Informationen an die dienstleistungsseitigen Geschäftsobjekte weiter.
Stub und Skelett verbergen eine gewisse Komplexität.
Der Stub verbirgt die Serialisierung von Parametern und die Kommunikation auf Netzwerkebene, um dem Anrufer einen einfachen Aufrufmechanismus zu präsentieren.
Das Gerüst ist für die Weiterleitung des Aufrufs an die eigentliche Implementierung von Remote-Objekten verantwortlich.
http://docs.Oracle.com/javase/7/docs/platform/rmi/spec/rmi-Arch2.html
Das erste, was Sie tun müssen, ist, die Skelette zu vergessen. Sie sind seit 13 Jahren veraltet.
Das stub wird vom fernen Objekt erstellt, wenn es exportiert wird. Sie wird dann entweder an die Registry gebunden und vom Client über eine Suche abgerufen, oder sie wird als Ergebnis einer anderen Remote-Methode direkt an den Client zurückgegeben.
Der Client verwendet dann den Stub als Implementierung der betreffenden Remote-Schnittstelle, um den Netzwerkteil von RMI auszuführen, wobei er mit der Server-JVM interagiert, um schließlich dieselbe Methode im Remote-Objekt aufzurufen, die der Client im Stub aufruft.
Der Schlüssel zum Verständnis von "Stubs" und "Skeletten" besteht darin, das Konzept von Marshalling zu verstehen:
Die -Rundschaftsarbeit ist nur eine Suchfunktion; nichts mehr. Wenn ein Server eine bind()
ausführt, "registriert" er sich selbst bei der rmiregistry . Wenn ein Client eine lookup()
ausführt, prüft er, was auf dem Server registriert ist. Nicht mehr, nicht weniger.
Ich denke nicht, dass es Sinn macht, über Terminologie wie "Skelette" zu streiten. Wenn Sie möchten, können Sie alles als "Stub" bezeichnen. Der Punkt ist, beide sind PROXIES, beide tun MARSHALLING, eine Seite existiert unter dem Client (in der der Client aufruft), und die andere Seite ist auf dem Server vorhanden (das Grundgerüst ruft den eigentlichen Servercode auf).
Hoffentlich haben meine Erklärung und mein Beispiel in Ihrem einem anderen Link geholfen (zumindest ein wenig).
Stub: Ein Stub ist eine kleine Programmroutine, die ein längeres Programm ersetzt, das möglicherweise später geladen wird oder aus der Ferne liegt.
Skeleton Ein Skelett für ein Remote-Objekt ist eine serverseitige Entität, die Aufrufe an die eigentliche Remote-Objektimplementierung weiterleitet.
Ein Stub für ein Remote-Objekt fungiert als lokaler Vertreter eines Clients oder als Proxy für das Remote-Objekt. Der Stub verbirgt die Serialisierung von Parametern und die Kommunikation auf Netzwerkebene, um dem Anrufer einen einfachen Aufrufmechanismus zu präsentieren.
Alternativ kann ein Programm betrachtet werden, das auf einer Maschine ausgeführt wird: Jede Methode ist eine Verzweigung. Wenn Sie die Methode auf eine Remote-Maschine verschieben, trennen Sie den Zweig ab und belassen einen Stub, der nur die Kommunikation enthält.
Quelle
In der Remote-JVM kann jedes Remote-Objekt ein entsprechendes Gerüst haben. Das Gerüst ist für die Weiterleitung des Aufrufs an die eigentliche Implementierung von Remote-Objekten verantwortlich.
Und ein Skelett betrachte ich als erste Implementierung - etwas, das die aufrufende Konvention erfüllt, eine Teiloperation ausführt und zufriedenstellend abschließt.
Formular Oracle