Inhaltsverzeichnis
Was ist grpc?
So erkennen Sie die Vorteile von grpc
Heim Backend-Entwicklung Golang Unterstützt grpc nur die Go-Sprache?

Unterstützt grpc nur die Go-Sprache?

Dec 16, 2022 pm 03:51 PM
golang go语言 grpc

grpc unterstützt nicht nur die Go-Sprache. grpc ist ein Kommunikationsprotokoll, das auf HTTP/2 basiert und das mehrsprachige RPC-Framework unterstützt; derzeit werden C-, Java- und Go-Sprachversionen bereitgestellt, nämlich grpc, grpc-java, grpc-go; , Python, Ruby, Objective-C, PHP und C# werden unterstützt.

Unterstützt grpc nur die Go-Sprache?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, GO Version 1.18, Dell G3-Computer.

Was ist grpc?


gRPC ist ein Kommunikationsprotokoll, das auf HTTP/2 basiert, das mehrsprachige RPC-Framework unterstützt und für Mobilgeräte und HTTP/2 konzipiert ist. gRPC basiert auf dem HTTP/2-Standard und bietet Funktionen wie bidirektionales Streaming, Flusskontrolle, Header-Komprimierung und Multiplexing-Anfragen über eine einzige TCP-Verbindung. Diese Funktionen sorgen für eine bessere Leistung auf Mobilgeräten und sparen Strom und Platz.

RPC: Die Abkürzung für Remote Procedure Call, übersetzt als Remote Procedure Call (auch als Remote Method Call oder Remote Call übersetzt), ist ein Computerkommunikationsprotokoll. Dieses Protokoll kann das Aufrufen von Remote-Diensten so einfach machen wie das Aufrufen lokaler Dienste, ohne dass Sie sich um netzwerk-, plattform-, sprachübergreifende und andere Probleme kümmern müssen.

Die gRPC-Nachrichtenserialisierungsmethode verwendet normalerweise Protobuf, ein Binärformat mit geringer Größe, schneller Netzwerkübertragung, weniger Bandbreite und Datenverkehr sowie einer höheren Anrufleistung.

Unterstützt grpc nur die Go-Sprache?

Funktionen von gRPC

  • IDL

    gRPC verwendet ProtoBuf, um Dienste zu definieren. ProtoBuf ist ein von Google entwickeltes Datenserialisierungsprotokoll (ähnlich XML, JSON). ProtoBuf kann Daten serialisieren und wird häufig in der Datenspeicherung, Kommunikationsprotokollen usw. verwendet.

  • Mehrsprachige Unterstützung

    gRPC unterstützt mehrere Sprachen und kann automatisch Client- und Server-Funktionsbibliotheken basierend auf Sprachen generieren. Derzeit werden die C-Version grpc, die Java-Version grpc-java und die Go-Version grpc-go bereitgestellt. Darunter unterstützt grpc C, C++, Node.js, Python, Ruby, Objective-C, PHP und C# und andere Sprachen .grpc-java unterstützt die Android-Entwicklung.

  • HTTP2

    gRPC basiert auf dem HTTP2-Standard und bietet leistungsfähigere Funktionen wie bidirektionales Streaming, Header-Komprimierung, Multiplexing-Anfragen usw. Diese Funktionen bieten erhebliche Vorteile wie Bandbreiteneinsparungen, kürzere TCP-Verbindungszeiten, Einsparungen bei der CPU-Auslastung und eine längere Batterielebensdauer. Gleichzeitig kann gRPC auch die Leistung von Cloud-Diensten und Webanwendungen verbessern. gRPC kann sowohl auf dem Client als auch auf dem Server angewendet werden, wodurch eine transparente Client-Server-Kommunikation erreicht und der Aufbau von Kommunikationssystemen vereinfacht wird.

Warum verwenden wir grpc?

  • Gute Ökologie: Unterstützt von Google. Nginx bietet beispielsweise auch Unterstützung für grpc, Referenzlink

  • Sprachübergreifend: sprachübergreifend und generiert automatisch SDK

  • Hohe Leistung: Beispielsweise ist die Leistung von Protobuf höher als die von JSON, beispielsweise http2. 0-Leistung ist höher als http1. 1

  • Starke Eingabe: Der Compiler löst viele Probleme für Sie

  • Streaming-Verarbeitung (basierend auf http2.0): Unterstützt Client-Streaming, Server-Streaming und bidirektionales Streaming

So erkennen Sie die Vorteile von grpc


1 Hohe Leistung von grpc: Warum ist Protobuf besser als JSON?

1) Was ist Protobuf?

  • Protobuf ist ein von Google entwickeltes Binärformat zur Serialisierung von Daten zwischen verschiedenen Diensten. Es ist eine IDL-Sprache (Schnittstellenbeschreibungssprache)

2) Wie viel schneller ist sie als JSON?

3) Warum ist Protobuf schneller als JSON?

  • Der binäre Datenfluss und der JSON-Datenfluss von Protobuf sind wie unten dargestellt

Unterstützt grpc nur die Go-Sprache?

  • Beim Vergleich der JSON-Daten- und Protobuf-Datenformate können wir feststellen, dass
  • Geringe Größe – keine Trennzeichen erforderlich: Die TLV-Speichermethode erfordert keine Trennzeichen (Komma, doppelte Anführungszeichen usw.) zum Trennen von Feldern, wodurch die Größe reduziert wird Verwendung von Trennzeichen
  • Kleine Größe – leere Felder weggelassen: Wenn für das Feld kein Feldwert festgelegt ist, sind die Daten bei der Serialisierung des Feldes überhaupt nicht vorhanden, d. h. es ist keine Codierung erforderlich, und JSON übergibt die Schlüssel und der Wert des leeren Werts
  • Kleine Größe - Tag-Binärdarstellung: Es verwendet den numerischen Wert des Felds und wandelt ihn dann zur Darstellung in einen Binärwert um. Dies ist platzsparender als die Zeichenfolgendarstellung des JSON-Schlüssels.
  • Schnelle Codierung und Decodierung: Der Typ des Felds wird im Tag gespeichert. Sie können die Länge des Werts direkt ermitteln. Wenn der Wert eine Zeichenfolge ist, können Sie die Länge direkt verwenden Bytes nach der Länge, um den Wert von value zu erhalten, müssen wir einen String-Abgleich durchführen
  • Um mehr über die Protobuf-Codierung zu erfahren, können Sie zu
  • gehen: Varint- und Zickzack-Codierungsmethoden
2. Hohe Leistung von grpc: Warum ist http2.0 leistungsstärker als http1.1?

1) Multiplexing

    http2.0 und http 1.* und Vergleich von http1.1pipling
  • Schematisches Diagramm

Unterstützt grpc nur die Go-Sprache?

    http/1.
  • *: Eine Anfrage, eine Antwort, eine Verbindung wird hergestellt und nach der Verwendung geschlossen. Jede Anfrage muss eine Verbindung herstellen die Rückkehr der vorherigen Anfrage, um die Möglichkeit zur Ausführung zu erhalten. Sobald eine Anfrage abgelaufen ist, können nachfolgende Anfragen nur blockiert werden, und es gibt keine Möglichkeit, dies als Head-of-Line-Blockierung zu bezeichnen
  • http2
  • : Mehrere Anfragen können gleichzeitig bearbeitet werden. Sie werden parallel auf einer Verbindung ausgeführt. Eine bestimmte Anforderungsaufgabe ist sehr zeitaufwändig und hat keinen Einfluss auf die normale Ausführung anderer Verbindungen. Welche weiteren Vorteile hat das GRPC-Multiplexing? Es reduziert die Anzahl der TCP-Verbindungen und reduziert den Speicher- und CPU-Anforderungen des Servers und des Clients. Der Druck des Wartens reduziert die TCP-Verbindung und stellt sicher, dass die TCP-Wiederherstellung nicht häufig ausgelöst wird, sodass es nicht häufig zu langsamen Starts kommt
  • reduziert die TCP-Verbindung und verbessert die Netzwerküberlastung
  • Warum http/1.1-Multiplexing nicht möglich ist erreicht werden, aber http2.0 kann?
    • Weil http/1.1 Text für die Übertragung verwendet, während http2.0 eine binäre Frame-Übertragung verwendet
    • 2) Header-Komprimierung
  • Feste Feldkomprimierung
  • : http kann mit http gepaart werden. Der Körper ist gzip komprimiert, wodurch Bandbreite gespart werden kann. Es gibt jedoch auch viele Felder im Header der Nachricht, die nicht komprimiert sind, z. B. Cookies und Benutzeragenten. Diese müssen komprimiert werden
    • , um Duplikate zu vermeiden: Es gibt viele Viele Feldwerte werden in der Nachricht wiederholt, daher ist es notwendig, Duplikate zu vermeiden

Kodierungsverbesserung: Die Felder sind ASCII-kodiert, was ineffizient ist implementiert durch den HPACK-Algorithmus

Der Algorithmus besteht hauptsächlich aus drei Teilen: Statisches Wörterbuch: Organisieren Sie häufig verwendete Header-Felder in einem Wörterbuch, z. B. {":method": "GET"}, das durch eine einzelne Zahl dargestellt werden kann 2
  • Dynamisches Wörterbuch: Einige Header, die nicht im Feld des statischen Wörterbuchs enthalten sind, verwenden dynamisches Wörterbuch Huffman-Kodierung: Komprimierungskodierung
  • 3) Binäres Framing
  • Auf der binären Framing-Ebene wird HTTP 2.0 aufgeteilt Alle übertragenen Informationen werden in kleinere Nachrichten und Frames aufgeteilt und im Binärformat codiert, wobei die Header-Informationen von HTTP1.x in den Header-Frame und unser Anforderungstext in den Daten-Frame eingekapselt werden.
  • Nachdem diese Frames auf diese Weise gerahmt wurden, können sie in der falschen Reihenfolge gesendet und dann entsprechend der Stream-ID im Header jedes Frames zusammengestellt werden.
    • Vergleiche http/1.1
    • Da es auf Text basiert und Zeilenumbrüche verwendet die einzelnen Schlüssel:Werte zu trennen. Die folgenden Probleme:
    • Es kann jeweils nur eine Anfrage oder Antwort verarbeitet werden, da die Analyse dieser Art von Daten, die Nachrichten durch Trennzeichen trennt, nicht beendet werden kann, bevor sie abgeschlossen ist
    • Es ist unmöglich vorherzusagen Wie viel Speicher wird benötigt, um diese Art von Daten zu analysieren, was dem Server große Probleme bereiten wird? Großer Druck

4) Der Server pusht aktiv Ressourcen

    • Da der Server beim aktiven Pushen von Ressourcen unterstützt wird, können einige Anfragen weggelassen werden. Wenn Sie beispielsweise zwei Dateien benötigen, 1.html und 1.css, müssen Sie sie bei http1.0 zweimal anfordern, und der Server gibt sie zweimal zurück. Aber http2.0 ermöglicht es dem Client, einmal eine Anfrage zu stellen, und dann antwortet der Server direkt zweimal.

    Weitere Programmierkenntnisse finden Sie unter: Einführung in die Programmierung! !

Das obige ist der detaillierte Inhalt vonUnterstützt grpc nur die Go-Sprache?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly? Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly? Apr 02, 2025 pm 02:09 PM

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet? Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet? Apr 02, 2025 pm 02:06 PM

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Apr 02, 2025 pm 05:09 PM

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Bei der Verwendung von Goland für GO -Sprachentwicklung begegnen viele Entwickler benutzerdefinierte Struktur -Tags ...

Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte? Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte? Apr 02, 2025 pm 02:03 PM

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

Welche Bibliotheken in GO werden von großen Unternehmen entwickelt oder von bekannten Open-Source-Projekten bereitgestellt? Welche Bibliotheken in GO werden von großen Unternehmen entwickelt oder von bekannten Open-Source-Projekten bereitgestellt? Apr 02, 2025 pm 04:12 PM

Welche Bibliotheken in GO werden von großen Unternehmen oder bekannten Open-Source-Projekten entwickelt? Bei der Programmierung in Go begegnen Entwickler häufig auf einige häufige Bedürfnisse, ...

Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren? Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren? Apr 02, 2025 pm 04:54 PM

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

Was ist der Unterschied zwischen 'var' und 'Typ' Typenwort Definition in der GO -Sprache? Was ist der Unterschied zwischen 'var' und 'Typ' Typenwort Definition in der GO -Sprache? Apr 02, 2025 pm 12:57 PM

Zwei Möglichkeiten, Strukturen in der GO -Sprache zu definieren: Der Unterschied zwischen VAR- und Typ -Schlüsselwörtern. Bei der Definition von Strukturen sieht die Sprache oft zwei verschiedene Schreibweisen: Erstens ...

Wie kann sichergestellt werden, dass die Parallelität beim Schreiben von Multi-Process-Protokollen sicher und effizient ist? Wie kann sichergestellt werden, dass die Parallelität beim Schreiben von Multi-Process-Protokollen sicher und effizient ist? Apr 02, 2025 pm 03:51 PM

Effizient behandeln Probleme mit der Parallelitätssicherheit beim Schreiben von Multi-Process-Protokoll. Mehrere Prozesse schreiben gleichzeitig die gleiche Protokolldatei. Wie kann die Parallelität sicher und effizient sichergestellt werden? Das ist ein ...

See all articles