Einführung in Thrift
1. Was ist Thrift?
Thrift wurde früh vom internen Team von Facebook entwickelt. Es ist eine Art Remote Später wurde die Open Source-Methode in Apache integriert und zum Apache Thrift-Projekt.
Thrift ermöglicht die Definition von Datentypen und Dienstschnittstellen in einer einfachen Definitionsdatei als Eingabedatei, und der Compiler generiert Code, um auf einfache Weise RPC-Client- und Serverkommunikation für eine nahtlose programmiersprachenübergreifende Kommunikation zu generieren.
2. Was ist RPC (Remote Procedure Call Protocol), Remote Procedure Call Protocol?
RPC verbirgt die zugrunde liegenden Kommunikationsdetails (keine direkte Verarbeitung der Socket- oder HTTP-Kommunikation erforderlich). RPC ist ein Anforderungs-Antwort-Modell.
Der Client initiiert eine Anfrage und der Server gibt eine Antwort zurück (ähnlich wie HTTP zum Aufrufen von Remote-Funktionen (oder -Methoden) verwendet wird, genau wie beim Aufrufen lokaler Funktionen (oder Methoden).
Thrift-Stack-Struktur
Thrift-Datentyp
Grundtyp : bool: Boolescher Wert, wahr oder falsch, entsprechend dem Booleschen Wert von Java
Byte: 8-Bit-Ganzzahl mit Vorzeichen, entsprechend dem Byte von Java
i16: 16-Bit-Ganzzahl mit Vorzeichen, entsprechend dem Kurzwert von Java
i32: 32 Bit-Ganzzahl mit Vorzeichen, entsprechend Javas int
i64: 64-Bit-Ganzzahl mit Vorzeichen, entsprechend Javas long
double: 64-Bit-Gleitkommazahl, entsprechend Javas double
string: unbekannter codierter Text oder binäre Zeichenfolge , entsprechend Javas String
-Strukturtyp: Struktur: Definiert ein öffentliches Objekt, ähnlich der Strukturdefinition in der C-Sprache. In Java handelt es sich um einen JavaBean
Container Typ : list: Entspricht Javas ArrayList
set: Entspricht Javas HashSet
map: Entspricht Javas HashMap
Ausnahmetyp : Exception: Ausnahme entsprechend Java
Diensttyp:Dienst: Klasse, die dem Dienst entspricht
Sparsamkeits-Java-Code generierenhttp://thrift . apache.org/download
namespace java service.demo service Hello{ string helloString(1:string para) i32 helloInt(1:i32 para) bool helloBoolean(1:bool para) void helloVoid() string helloNull() }
(1) Asynchrone Client-Klasse AsyncClient und asynchrone Schnittstelle AsyncIface
(2) Synchrone Client-Klasse Client und synchrone Schnittstelle Iface Die Client-Klasse erbt von TServiceClient und implementiert die synchrone Schnittstelle Iface Basierend auf der in der Thrift-Datei definierten Schnittstellenfunktion wird die Client-Klasse bei der Entwicklung des Thrift-Servers verwendet Implementieren Sie die Schnittstelle Iface.
(3) Prozessorklasse, diese Klasse wird hauptsächlich bei der Entwicklung von Thrift-Serverprogrammen verwendet. Diese Klasse definiert intern eine Zuordnung aller Funktionsnamen zu Funktionsobjekten. Suchen Sie einfach nach Funktionsobjekt der Funktion aus der Karte entsprechend dem Funktionsnamen und dann ausführen
(4) Parameterklasse, definieren Sie eine Parameterklasse für jede Schnittstellenfunktion, zum Beispiel: Generieren Sie eine Parameterklasse für die Schnittstelle helloInt: helloInt_args Im Allgemeinen lautet die Benennungsmethode der Schnittstellenfunktionsparameterklasse: Schnittstellenfunktion name_args (5) Rückgabewertklasse, zum Beispiel: Für die Schnittstelle helloInt wird eine Rückgabewertklasse generiert. helloInt_result. Im Allgemeinen lautet die Benennungsmethode der Rückgabewertklasse der Schnittstellenfunktion:
Es gibt Lese- und Schreibvorgänge für Daten in der Parameterklasse und der Rückgabewertklasse Funktionsname und Parameter werden entsprechend der Protokollklasse gekapselt. In der Rückgabewertklasse werden die Daten gemäß den Protokollvorschriften gelesen.
Iface
HelloServiceImpl
Aufrufprozess
Während des Thrift-Aufrufprozesses werden hauptsächlich die drei Hauptkernklassen Transportschichtklasse, Protokollschichtklasse und Verarbeitungsklasse zwischen Thrift-Client und -Server verwendet Klassen arbeiten zusammen, um den gesamten Aufrufprozess von rpc abzuschließen
(1) Übergeben Sie den vom Clientprogramm aufgerufenen Funktionsnamen und die Parameter an die Protokollschicht (TProtocol), und die Protokollschicht kapselt den Funktionsnamen und Parameter entsprechend dem Protokollformat, und dann wird das gekapselte Ergebnis an die untere Transportschicht übergeben. Beachten Sie hier: Der vom Thrift-Serverprogramm verwendete Protokolltyp muss derselbe sein, andernfalls kann das Thrift-Serverprogramm die Daten auf seiner Protokollebene nicht analysieren.
(2) Die Transportschicht (TTransport) verarbeitet die übergebenen Daten Bei der Verarbeitung durch die Protokollschicht kapselt beispielsweise die Implementierungsklasse TFramedTransport der Transportschicht die Daten in einen Frame, d. h. „Datenlänge + Dateninhalt“, und sendet die verarbeiteten Daten dann über das Netzwerk an den Thrift-Server. Sie müssen auch hier darauf achten: Sie müssen mit dem Thrift-Server kommunizieren. Die Implementierungsklasse der vom Programm verwendeten Transportschicht ist konsistent, andernfalls kann die Transportschicht von Thrift die Daten nicht rückwärts verarbeiten
(3) Der Thrift-Server empfängt Die über das Netzwerk übertragenen Anrufanforderungsdaten werden über die Transportschicht (TTransport) übertragen und anschließend die empfangenen Daten umgekehrt verarbeitet. Beispielsweise konvertiert die Implementierungsklasse TFramedTransport der Transportschicht Netzwerkdaten in Form von „Datenlänge + Dateninhalt“. in Form von reinem Dateninhalt und liefert ihn dann an die Protokollklasse (TProtocol) des Thrift-Servers. (4) Die Protokollklasse (TProtocol) des Thrift-Servers entkapselt die von der Transportschicht verarbeiteten Daten gemäß dem Protokoll und übergibt die entkapselten Daten zur Verarbeitung an die Prozessorklasse. (5) Die Prozessorklasse des Thrift-Servers findet das Funktionsobjekt, das dem Funktionsnamen entspricht, basierend auf dem Ergebnis der Protokollschicht (TProtocol)-Analyse;
(6) Der Thrift-Server verwendet die übergebenen Parameter, um das gefundene Funktionsobjekt aufzurufen; (7) Der Thrift-Server liefert das Ausführungsergebnis des Funktionsobjekts an die Protokollschicht; (8) Die Protokollschicht des Thrift-Servers kapselt das Ausführungsergebnis der Funktion. (9) Die Transportschicht des Thrift-Servers verarbeitet die gekapselten Ergebnisse der Protokollschicht, z. B. indem sie sie in Frames kapselt, und sendet sie dann sie an das Thrift-Client-Programm weiter;
(11) Die Protokollschicht des Thrift-Clients entkapselt die Daten entsprechend in das Protokollformat, ruft dann das spezifische Funktionsausführungsergebnis ab und liefert es an die aufrufende Funktion;
Server
Kunde
Ausgabeergebnisse
Protokolle und Übertragungsmethoden
Thrift ermöglicht es Benutzern, die Art des Übertragungskommunikationsprotokolls zwischen den auszuwählen Client und Server werden im Allgemeinen in Text- und Binärübertragungsprotokolle unterteilt. Um Bandbreite zu sparen und die Übertragungseffizienz zu verbessern, werden im Allgemeinen die meisten Übertragungsprotokolle vom Binärtyp verwendet, manchmal werden auch textbasierte Protokolle verwendet. Dies muss auf den tatsächlichen Anforderungen des Projekts/Produkts basieren. Zu den häufig verwendeten Protokollen gehören die folgenden:
TBinaryProtocol: Das Standardprotokoll von Thrift, das für die Datenübertragung ein binäres Kodierungsformat verwendet und Rohdaten grundsätzlich direkt sendet.TCompactProtocol: komprimiertes, dichtes Datenübertragungsprotokoll, basierend auf dem Zickzack-Kodierungsformat mit variabler Länge der MengeTJSONProtocol: Datenübertragung mithilfe des JSON-Datenkodierungsprotokolls (JavaScript Object Notation)TDebugProtocol: Wird häufig zum Testen durch Programmierer verwendet und zum einfachen Lesen in Textform dargestellt
Häufig verwendetes Transportmittel Zu den Schichten gehören Folgendes:
TSocket – verwendet blockierende E/A für die Übertragung, was der am häufigsten verwendete Modus ist
TFramedTransport – verwendet den nicht blockierenden Modus und überträgt nach Blockgröße, ähnlich wie NIO in Java
TNonblockingTransport – Verwendung einer nicht blockierenden Methode zum Erstellen asynchroner Clients
TServerSocket: Nicht blockierender Socket, der auf der Serverseite verwendet wird. Die von accecpt empfangenen Socket-Typen sind alle TSocket (d. h. blockierende Socket-Typen)
Das obige ist der detaillierte Inhalt vonSchnellstartmethode für das Thrift-Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!