Heim Backend-Entwicklung Golang Wie verwende ich GRPC in Go?

Wie verwende ich GRPC in Go?

May 10, 2023 pm 02:03 PM
go 使用 grpc

Mit der kontinuierlichen Weiterentwicklung moderner Anwendungen werden auch die Anforderungen an hohe Leistung und Skalierbarkeit immer höher. Daher gibt es eine verteilte Architektur auf Basis des RPC-Protokolls, um diese Anforderungen zu erfüllen. GRPC ist ein Open-Source-Framework, das auf Googles internem StuB basiert. GRPC bietet einen hoch skalierbaren Mechanismus für die Kommunikation zwischen Programmiersprachen, der darauf ausgelegt ist, die standardisierte Kommunikation zwischen Anwendungen effizient zu verwalten.

In diesem Artikel wird die Verwendung von GRPC in Go vorgestellt. Wir behandeln das Konzept von GRPC, die Schritte zur Kommunikation mithilfe von GRPC und ein Beispiel für die Implementierung eines einfachen GRPC-Dienstes in Go.

Das Konzept von GRPC

GRPC ist ein RPC-Framework, das auf HTTP/2 basiert und Protobuf als Standardmethode für die Datenserialisierung verwendet. Dies bedeutet, dass die Kommunikation zwischen verschiedenen Sprachen problemlos ermöglicht werden kann (unter Nutzung des von grpc bereitgestellten generierten Codes und der Middleware).

Skalierbarkeit: GRPC kann einfache und komplexe Authentifizierungs- und Autorisierungslogik auf der Code-Stream- und Verbindungsebene implementieren und mit modernen Computerplattformen wie Kubernetes zusammenarbeiten.

Kommunikation mit GRPC

In diesem Abschnitt stellen wir die detaillierten Schritte für die Kommunikation mit GRPC vor. In diesem Artikel implementieren wir einen einfachen GRPC-Dienst mithilfe der Go-Sprache.

Schritt 1: Protobuf-Datei definieren

Zuerst müssen wir unsere Protobuf-Datei definieren, um unsere Schnittstelle zu deklarieren. In diesem Beispiel definieren wir einen einfachen Dienst, der zwei Zahlen addiert. Das Folgende ist der Inhalt unserer .proto-Datei:

syntax = "proto3";

option go_package = ".;main";

package calculator;

message AddRequest {
    int32 x = 1;
    int32 y = 2;
}

message AddResponse {
    int32 result = 1;
}

service Calculator {
    rpc Add(AddRequest) returns (AddResponse);
}
Nach dem Login kopieren

In dieser Protobuf-Datei definieren wir zwei Nachrichten, AddRequest und AddResponse, sowie einen Service-Interface-Rechner, der eine Add-Methode bereitstellt. Die Methode empfängt zwei Zahlen als Parameter und gibt deren Summe zurück.

Schritt 2: GO-Code generieren

Als nächstes müssen wir das Protoc-Tool verwenden, um GO-Code zu generieren. Wir können Code auf folgende Weise generieren:

protoc --go_out=plugins=grpc:. *.proto
Nach dem Login kopieren
Nach dem Login kopieren

Dieser Befehl generiert eine Rechner.pb.go-Datei, die den GO-Code für die von uns definierten Dienste und Nachrichten enthält.

Schritt 3: Serverseitig implementieren

Auf der Serverseite müssen wir einen Dienst für die von uns definierte Schnittstelle implementieren. In unserem Beispiel ist unser Dienst nur ein einfacher Additionsdienst, der zwei Zahlen addiert und deren Summe zurückgibt. Das Folgende ist unser Servercode:

package main

import (
    "context"
    "net"
    "google.golang.org/grpc"
    pb "github.com/calculator"
)

type server struct{}

func (s *server) Add(ctx context.Context, req *pb.AddRequest) (*pb.AddResponse, error) {
    result := req.X + req.Y
    return &pb.AddResponse{Result:result}, nil
}

func main() {
    l, err := net.Listen("tcp", ":8080")
    if err != nil {
        panic(err)
    }
    s := grpc.NewServer()

    pb.RegisterCalculatorServer(s, &server{})

    err = s.Serve(l)
    if err != nil {
        panic(err)
    }
}
Nach dem Login kopieren

Wir definieren zunächst eine Struktur mit dem Namen „server“ und fügen ihr eine Add-Methode hinzu. Diese Methode empfängt zwei Zahlen x und y, berechnet ihre Summe und gibt eine AddResponse als Antwortobjekt zurück.

Wir definieren außerdem eine Hauptfunktion, in der wir einen neuen grpc-Dienst erstellen und ihn an die lokale Adresse von Port 8080 binden. Wir injizieren auch den von uns definierten Dienst in den Grpc-Server und starten den Grpc-Server.

Schritt 4: Implementieren Sie den Client

Zuletzt müssen wir einen Clientcode schreiben, der Anfragen an unseren Server senden und Antworten empfangen kann. Bitte beachten Sie, dass die .proto-Dateien im client- und serverseitigen Code übereinstimmen müssen. Unten ist unser Client-Code:

package main

import (
    "context"
    "fmt"
    "google.golang.org/grpc"
    pb "github.com/calculator"
)

func main() {
    conn, err := grpc.Dial(":8080", grpc.WithInsecure())
    if err != nil {
        panic(err)
    }

    client := pb.NewCalculatorClient(conn)

    req := pb.AddRequest{X:2, Y:3}
    resp, err := client.Add(context.Background(), &req)
    if err != nil {
        panic(err)
    }

    fmt.Printf("Result: %d", resp.Result)
}
Nach dem Login kopieren

In diesem Client-Code erstellen wir zunächst eine Verbindung zum GRPC-Server und verwenden diese Verbindung dann, um einen neuen Client zu erstellen. Als nächstes erstellen wir eine AddRequest, setzen ihre Werte auf 2 und 3 und senden die Anfrage an den Server. Schließlich empfangen und drucken wir die Antwort des Servers.

So führen Sie den Beispielcode aus

Um unseren Beispielcode auszuführen, müssen wir zunächst die Go-Entwicklungsumgebung einrichten und zugehörige Abhängigkeiten installieren. Angenommen, unser Codepaket heißt main. Um unseren Beispielcode lokal auszuführen, müssen Sie zunächst den folgenden Befehl ausführen:

go get -u google.golang.org/grpc
go get -u github.com/golang/protobuf/protoc-gen-go
Nach dem Login kopieren

Als nächstes führen Sie den protoc-Befehl aus, um Go-Code zu generieren:

protoc --go_out=plugins=grpc:. *.proto
Nach dem Login kopieren
Nach dem Login kopieren

Kompilieren Sie dann unseren Service und Client Code eingeben und separat starten:

go build server.go
go build client.go
./server
./client
Nach dem Login kopieren

Wenn alles gut geht, sendet der Client eine Hinzufügungsanforderung an den GRPC-Server und zeigt das Ergebnis als 5 an.

Fazit

In diesem Artikel wird die Verwendung von GRPC in der Go-Sprache vorgestellt. Wir haben zunächst das Konzept von GRPC besprochen und dann gezeigt, wie man Protobuf zum Definieren von Schnittstellenspezifikationen verwendet, wie man GO-Code generiert und wie man einen einfachen GRPC-Dienst implementiert. Mit diesen Schritten können Sie mit der Verwendung von GRPC in Go beginnen, um leistungsstarke und skalierbare verteilte Systeme zu implementieren.

Das obige ist der detaillierte Inhalt vonWie verwende ich GRPC in Go?. 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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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)

BTCC-Tutorial: Wie kann ich die MetaMask-Wallet an der BTCC-Börse binden und verwenden? BTCC-Tutorial: Wie kann ich die MetaMask-Wallet an der BTCC-Börse binden und verwenden? Apr 26, 2024 am 09:40 AM

MetaMask (auf Chinesisch auch Little Fox Wallet genannt) ist eine kostenlose und beliebte Verschlüsselungs-Wallet-Software. Derzeit unterstützt BTCC die Bindung an die MetaMask-Wallet. Nach der Bindung können Sie sich mit der MetaMask-Wallet schnell anmelden, Werte speichern, Münzen kaufen usw. und bei der erstmaligen Bindung einen Testbonus von 20 USDT erhalten. Im BTCCMetaMask-Wallet-Tutorial stellen wir detailliert vor, wie man MetaMask registriert und verwendet und wie man das Little Fox-Wallet in BTCC bindet und verwendet. Was ist die MetaMask-Wallet? Mit über 30 Millionen Nutzern ist MetaMask Little Fox Wallet heute eines der beliebtesten Kryptowährungs-Wallets. Die Nutzung ist kostenlos und kann als Erweiterung im Netzwerk installiert werden

Wie verwende ich gRPC, um das Hochladen von Dateien in Golang zu implementieren? Wie verwende ich gRPC, um das Hochladen von Dateien in Golang zu implementieren? Jun 03, 2024 pm 04:54 PM

Wie implementiert man den Datei-Upload mit gRPC? Erstellen Sie unterstützende Servicedefinitionen, einschließlich Anforderungs- und Antwortnachrichten. Auf dem Client wird die hochzuladende Datei geöffnet, in Blöcke aufgeteilt und dann über einen gRPC-Stream an den Server gestreamt. Auf der Serverseite werden Dateiblöcke empfangen und in einer Datei gespeichert. Der Server sendet nach Abschluss des Datei-Uploads eine Antwort, um anzugeben, ob der Upload erfolgreich war.

Wie sende ich Go WebSocket-Nachrichten? Wie sende ich Go WebSocket-Nachrichten? Jun 03, 2024 pm 04:53 PM

In Go können WebSocket-Nachrichten mit dem Paket gorilla/websocket gesendet werden. Konkrete Schritte: Stellen Sie eine WebSocket-Verbindung her. Senden Sie eine Textnachricht: Rufen Sie WriteMessage(websocket.TextMessage,[]byte("message")) auf. Senden Sie eine binäre Nachricht: Rufen Sie WriteMessage(websocket.BinaryMessage,[]byte{1,2,3}) auf.

Wie kann ich Zeitstempel mithilfe regulärer Ausdrücke in Go abgleichen? Wie kann ich Zeitstempel mithilfe regulärer Ausdrücke in Go abgleichen? Jun 02, 2024 am 09:00 AM

In Go können Sie reguläre Ausdrücke verwenden, um Zeitstempel abzugleichen: Kompilieren Sie eine Zeichenfolge mit regulären Ausdrücken, z. B. die, die zum Abgleich von ISO8601-Zeitstempeln verwendet wird: ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ . Verwenden Sie die Funktion regexp.MatchString, um zu überprüfen, ob eine Zeichenfolge mit einem regulären Ausdruck übereinstimmt.

Der Unterschied zwischen Golang und Go-Sprache Der Unterschied zwischen Golang und Go-Sprache May 31, 2024 pm 08:10 PM

Go und die Go-Sprache sind unterschiedliche Einheiten mit unterschiedlichen Eigenschaften. Go (auch bekannt als Golang) ist bekannt für seine Parallelität, schnelle Kompilierungsgeschwindigkeit, Speicherverwaltung und plattformübergreifende Vorteile. Zu den Nachteilen der Go-Sprache gehören ein weniger umfangreiches Ökosystem als andere Sprachen, eine strengere Syntax und das Fehlen dynamischer Typisierung.

Wie vermeidet man Speicherlecks bei der technischen Leistungsoptimierung von Golang? Wie vermeidet man Speicherlecks bei der technischen Leistungsoptimierung von Golang? Jun 04, 2024 pm 12:27 PM

Speicherlecks können dazu führen, dass der Speicher des Go-Programms kontinuierlich zunimmt, indem: Ressourcen geschlossen werden, die nicht mehr verwendet werden, wie z. B. Dateien, Netzwerkverbindungen und Datenbankverbindungen. Verwenden Sie schwache Referenzen, um Speicherlecks zu verhindern, und zielen Sie auf Objekte für die Garbage Collection ab, wenn sie nicht mehr stark referenziert sind. Bei Verwendung von Go-Coroutine wird der Speicher des Coroutine-Stapels beim Beenden automatisch freigegeben, um Speicherverluste zu vermeiden.

Was ist Bitget Launchpool? Wie verwende ich Bitget Launchpool? Was ist Bitget Launchpool? Wie verwende ich Bitget Launchpool? Jun 07, 2024 pm 12:06 PM

BitgetLaunchpool ist eine dynamische Plattform, die für alle Kryptowährungsbegeisterten entwickelt wurde. BitgetLaunchpool zeichnet sich durch sein einzigartiges Angebot aus. Hier können Sie Ihre Token einsetzen, um weitere Belohnungen freizuschalten, darunter Airdrops, hohe Renditen und einen großzügigen Preispool, der nur frühen Teilnehmern vorbehalten ist. Was ist BitgetLaunchpool? BitgetLaunchpool ist eine Kryptowährungsplattform, auf der Token zu benutzerfreundlichen Bedingungen eingesetzt und verdient werden können. Durch die Investition von BGB oder anderen Token in Launchpool haben Benutzer die Möglichkeit, kostenlose Airdrops und Einnahmen zu erhalten und an großzügigen Bonuspools teilzunehmen. Die Einnahmen aus verpfändeten Vermögenswerten werden innerhalb von T+1 Stunden berechnet und die Belohnungen basieren darauf

Eine Anleitung zum Unit-Testen gleichzeitiger Go-Funktionen Eine Anleitung zum Unit-Testen gleichzeitiger Go-Funktionen May 03, 2024 am 10:54 AM

Das Testen gleichzeitiger Funktionen in Einheiten ist von entscheidender Bedeutung, da dies dazu beiträgt, ihr korrektes Verhalten in einer gleichzeitigen Umgebung sicherzustellen. Beim Testen gleichzeitiger Funktionen müssen grundlegende Prinzipien wie gegenseitiger Ausschluss, Synchronisation und Isolation berücksichtigt werden. Gleichzeitige Funktionen können Unit-Tests unterzogen werden, indem Rennbedingungen simuliert, getestet und Ergebnisse überprüft werden.

See all articles