GRPC(二)Go语言互相调用服务器和客户端

目录

  1. gRPC用的protobuf配置与介绍
  2. go语言 gRPC服务器与客户端
  3. python gRPC服务器与客户端

gRPC Go语言调用Go语言

目录结构

在生成protogo的文件后,创建client和server的.go文件

server

package main

import (
	"context"
	"google.golang.org/grpc"
	"grpc/pb"
	"log"
	"net"
)

type rpcServer struct {
    
    
	pb.UnimplementedGRPCServer
}

func (r rpcServer) Ping(ctx context.Context, req *pb.Ping) (res *pb.Pong, err error) {
    
    
	log.Println(req.GetMsg())

	return &pb.Pong{
    
    
		Msg: "reply from server",
	}, nil
}

func main() {
    
    
	l, err := net.Listen("tcp", ":10086")
	if err != nil {
    
    
		panic(err)
	}
	s := grpc.NewServer()
	pb.RegisterGRPCServer(s, &rpcServer{
    
    })
	s.Serve(l)
}

client

package main

import (
	"context"
	"google.golang.org/grpc"
	"grpc/pb"
	"log"
)

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

	client := pb.NewGRPCClient(conn)
	req, err := client.Ping(context.Background(), &pb.Ping{
    
    Msg: "msg from client"})
	if err != nil {
    
    
		panic(err)
	}
	log.Println(req.Msg)
}

运行结果

  • server在这里插入图片描述
  • client
    在这里插入图片描述

Go语言gRPC流式传输(参数)

服务端

package main

import (
	"fmt"
	"google.golang.org/grpc"
	"grpc/pb"
	"log"
	"net"
)

type StreamAddServer struct {
    
    
	pb.UnimplementedStreamAddServer
}

func (s StreamAddServer) Add(server pb.StreamAdd_AddServer) error {
    
    
	var cnt = 0
	for {
    
    
		req, err := server.Recv()
		if err != nil {
    
    
			server.SendAndClose(&pb.Pong{
    
    Msg: fmt.Sprintf("recv done... %d times total ", cnt)})
			break
		}
		cnt++
		log.Println(req.GetMsg())
	}
	return nil
}

func main() {
    
    
	l, err := net.Listen("tcp", ":12222")
	if err != nil {
    
    
		panic(err)
		return
	}
	s := grpc.NewServer()
	pb.RegisterStreamAddServer(s, &StreamAddServer{
    
    })
	s.Serve(l)
}

在这里插入图片描述

客户端

package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	"grpc/pb"
	"log"
	"time"
)

func main() {
    
    
	dial, err := grpc.Dial("127.0.0.1:12222", grpc.WithInsecure())
	if err != nil {
    
    
		panic(err)
		return
	}
	client := pb.NewStreamAddClient(dial)
	add, err := client.Add(context.Background())
	if err != nil {
    
    
		panic(err)
		return
	}
	for i := 0; i < 10; i++ {
    
    
		add.Send(&pb.Ping{
    
    Msg: fmt.Sprintf("[%d]send from go client...", i)})
		time.Sleep(500 * time.Millisecond)
	}
	recv, err := add.CloseAndRecv()
	if err != nil {
    
    
		panic(err)
		return
	}
	log.Println(recv.GetMsg())
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xuehu96/article/details/122812910