Llamadas GRPC en varios idiomas

Esta vez probamos la llamada grpc entre go y python. Go es el cliente de grpc y python es el servidor de grpc.

  • Listo para trabajar:

El primer paso: instale la herramienta grpc de go;

go get -u github.com/golang/protobuf/proto
go get -u github.com/golang/protobuf/protoc-gen-go
go get google.golang.org/grpc

Paso 2: Instale la herramienta grpc de python;

pip install grpcio-tools
  • Pasos de implementación:

Primero cree un nuevo archivo hello.proto. El archivo es muy simple. Define un método de interfaz de servicio SayHello. El parámetro de entrada de este método es un mensaje HelloRequest y el valor de retorno es un mensaje HelloReply.

syntax = 'proto3';

message HelloRequest {
    string Name = 1;
}

message HelloReply {
    string Message = 1;
}

service HelloServer {
    rpc SayHello(HelloRequest) returns (HelloReply) {}
}

Una vez completada la definición, ejecute el comando protocol en el entorno go y el entorno python para compilar.

# go
protoc --go_out=plugins=grpc:./ hello.proto
# python
python -m grpc_tools.protoc -I. --python_out=.. --grpc_python_out=.. hello.proto

Una vez completada la compilación, comience a escribir programas de cliente y servidor.

  • El cliente grpc implementado por golang:
package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	pt "grpc/protos"
)

const (
	server_port = "192.168.88.111:8000"
)

// grpc客户端调用python实现的grpc服务端程序
func main() {
    
    
	// 连接服务器
	conn, err := grpc.Dial(server_port, grpc.WithInsecure())
	if err != nil {
    
    
		fmt.Println("连接服务器失败", err)
	}
	defer conn.Close()

	// 创建grpc客户端
	cli := pt.NewHelloServerClient(conn)

	// 远程调用SayHello方法
	reply, err := cli.SayHello(context.Background(), &pt.HelloRequest{
    
    Name: "tiger"})
	if err != nil {
    
    
		fmt.Println("cli.SayHello error: ", err)
		return
	}
	fmt.Println("message = ", reply.Message)
}
  • El servidor grpc implementado por python:
import hello_pb2_grpc
import hello_pb2
import grpc
from concurrent import futures
import time


# 实现服务接口
class HelloServerServicer(hello_pb2_grpc.HelloServerServicer):

    def SayHello(self, request, context):
        msg = request.Name + " hello"
        return hello_pb2.HelloReply(Message=msg)

# 开启服务器,对外提供rpc调用
def serve():
    # 创建多线程的服务器对象
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

    # 注册实现服务的方法到服务器对象中
    hello_pb2_grpc.add_HelloServerServicer_to_server(HelloServerServicer(), server)

    # 为服务器绑定IP地址和端口
    server.add_insecure_port('192.168.88.111:8000')

    # 开启服务
    print('服务器已开启')
    server.start()

    # 关闭服务
    # 使用 ctrl+c 可以退出服务
    try:
        time.sleep(1000)
    except KeyboardInterrupt:
        server.stop(0)


if __name__ == '__main__':
    serve()

El firewall necesita abrir el puerto 8000:

sudo ufw allow 8000

Resultado de la prueba: exitoso
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/zhongliwen1981/article/details/114244836
Recomendado
Clasificación