Home > Backend Development > Golang > Golang development: How to use gRPC to achieve cross-language communication

Golang development: How to use gRPC to achieve cross-language communication

王林
Release: 2023-09-21 11:03:36
Original
950 people have browsed it

Golang development: How to use gRPC to achieve cross-language communication

Golang development: How to use gRPC to achieve cross-language communication

Overview:
In modern software development, inter-system communication between different languages ​​is very common. In order to solve this problem, Google open sourced the gRPC framework, which is a high-performance, cross-language remote procedure call (RPC) framework. This article will introduce how to use gRPC in Golang development, and help readers understand how to achieve cross-language communication through specific code examples.

What is gRPC?
gRPC (gRPC Remote Procedure Call) is a high-performance, open source, cross-language remote procedure call (RPC) framework. It is developed based on Google's Protocol Buffers (ProtoBuf for short) serialization protocol. By defining service and message types, gRPC can easily generate client and server-side code in various languages ​​to achieve communication between different languages.

Environment preparation:
Before starting, make sure you have installed the development environment of Golang and gRPC. You can install gRPC development tools and Golang plug-ins through official documentation.

Step 1: Define the .proto file
.proto file is one of the cores of gRPC and is used to define services and message types. We can use ProtoBuf language to define data structures and services.

The following is a simple example .proto file that defines a HelloWorld service, including a SayHello method. The input parameter is a HelloRequest message and returns a HelloResponse message.

syntax = "proto3";

package helloworld;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string message = 1;
}
Copy after login

Step 2: Generate code
After defining the .proto file, we can use the protocol compiler protoc provided by gRPC to generate client and server-side code in the corresponding language.

Execute the following command in the terminal to generate Golang code:

protoc -I=./protos --go_out=plugins=grpc:./protos ./protos/helloworld.proto
Copy after login

This command will generate a helloworld.pb.go file based on the directory where the .proto file is located. This is the code we will use later. .

Step 3: Write server-side code
Next, we use Golang to write server-side code. First, we need to import gRPC and the automatically generated .pb.go file.

package main

import (
    "context"
    "fmt"
    "log"
    "net"

    "github.com/example/protos"
    "google.golang.org/grpc"
)

const (
    port = ":50051"
)

type server struct{}

func (s *server) SayHello(ctx context.Context, in *protos.HelloRequest) (*protos.HelloResponse, error) {
    return &protos.HelloResponse{Message: "Hello " + in.Name}, nil
}

func main() {
    lis, err := net.Listen("tcp", port)
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    s := grpc.NewServer()
    protos.RegisterGreeterServer(s, &server{})
    fmt.Println("Server started on port" + port)
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}
Copy after login

In the above code, we define a structure named server and implement the SayHello method we defined in the .proto file. Among them, the SayHello method receives a parameter of type HelloRequest and returns a response of type HelloResponse.

Step 4: Write client code
Next, we use Golang to write client code. First, you also need to import gRPC and the automatically generated .pb.go file.

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/example/protos"
    "google.golang.org/grpc"
)

const (
    address = "localhost:50051"
)

func main() {
    conn, err := grpc.Dial(address, grpc.WithInsecure())
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()
    c := protos.NewGreeterClient(conn)
    name := "World"
    r, err := c.SayHello(context.Background(), &protos.HelloRequest{Name: name})
    if err != nil {
        log.Fatalf("could not greet: %v", err)
    }
    log.Printf("Greeting: %s", r.Message)
    fmt.Println("Client finished")
}
Copy after login

In the above code, we use grpc.Dial to establish a connection with the server and create a GreeterClient to call the SayHello method. Then, output the message content returned by the server.

Step 5: Run the code
Finally, we run these two pieces of code to test it. First, start the server-side code, and then start the client-side code.

You will see the server prints out "Server started on port: 50051" and the client prints out "Greeting: Hello World". This means that the server successfully received the client's request and returned the correct response.

Summary:
By using the gRPC framework, we can easily achieve cross-language communication. In this article, we demonstrate how to develop using gRPC in Golang through specific sample code. You can define messages and services based on your needs, and write server-side and client-side code to enable cross-language communication. I hope this article can help you understand and use the gRPC framework.

The above is the detailed content of Golang development: How to use gRPC to achieve cross-language communication. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template