gRPC的stream使用

gRPC的stream介绍

gRPC为什么提供 steam功能?

  • 在以下场景使用unary rpc 可能有如下问题

    • 数据表过大可能造成熟瞬时的压力
    • 服务需要全部数据接收完毕,才能正确回调响应,进行业务处理,不能客户端边发送,服务端边接受。
  • stream rpc 适用于,大规模数据传递,和实时场景。

gRPC的stream的分类

  • stream 分类
    gRPC stream 种类

一元RPC

  • 定义形式
rpc SayHello(HelloRequest) returns (HelloResponse);
  • 描述
    1、客户端发送一个请求给服务端,
    2、得到服务端的一个响应,
    3、就像正常的函数调用
    在这里插入图片描述
  • client
package main

import (
	"context"
	pb "d-grpc/lib/proto/hellowrold"
	"google.golang.org/grpc"
	"log"
)

const (
	address = "localhost:50051"
)

func main() {
   
	// 链接服务
	conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
	if err != nil {
   
		log.Fatalf("dit not connetc:%v", err)
		return
	}
	defer conn.Close()
	// 创建一个客户端
	c := pb.NewGreeterClient(conn)
	r, err := c.SayHello(context.Background(), &pb.HelloRequest{
   Name: "world"})
	if err != nil {
   
		log.Fatalf("could not greet: %v", err)
	}

	// 打印响应信息
	log.Printf("Greeting: %s", r.GetMessage())
}
  • server
package main

import (
	"context"
	pb "d-grpc/lib/proto/hellowrold"
	"google.golang.org/grpc"
	"log"
	"net"
)

const (
	port = ":50051"
)

//
func main() {
   
	lis, err := net.Listen("tcp", port)
	if err != nil {
   
		log.Fatalf("failed to listen %v", err)
	}

	s := grpc.NewServer()
	pb.RegisterGreeterServer(s, &server{
   })
	if err := s.Serve(lis); err != nil {
   
		log.Fatalf("failed to serve:%v", err)
	}
}

type server struct {
   
	// 这个结构体实现了GreeterServer接口,避免service未实现
	pb.UnimplementedGreeterServer
}

func (*server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
   
	log.Printf("Received: %v", in.GetName(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值