Heim  >  Artikel  >  Java  >  Schnellstartmethode für das Thrift-Framework

Schnellstartmethode für das Thrift-Framework

一个新手
一个新手Original
2017-10-10 09:38:272018Durchsuche

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?

Einfach ausgedrückt besteht RPC darin, eine andere Maschine (Server) von einer Maschine (Client) aus aufzurufen, indem Parameter einer Funktion oder Methode übergeben werden zurückgegebenes Ergebnis.

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()
}

Hello.java-Inhalt

(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.

Kunde

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;

(10) Die Transportschicht des Thrift-Client-Programms verarbeitet die empfangenen Netzwerkergebnisse umgekehrt, um die tatsächlichen Protokolldaten zu erhalten;

(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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn