package main import ( "context" "fmt" "io" "log" "math" "research/grpc_msg_size/pb" "time" "google.golang.org/grpc" ) func init() { log.SetFlags(log.Lmicroseconds | log.LstdFlags | log.Lshortfile) } var msg string func init() { var buf []byte for i := 0; i < 1024*1024*1024; i++ { buf = append(buf, '0') } msg = string(buf) } func main() { addr := fmt.Sprintf("localhost:%v", 55555) conn, err := grpc.Dial(addr, grpc.WithInsecure()) if err != nil { log.Fatal(err) } defer conn.Close() client := pb.NewTestClient(conn) stream, err := client.Test(context.Background(), grpc.MaxCallRecvMsgSize(math.MaxInt32)) for { err := stream.Send(&pb.Request{ Msg: msg, }) if err != nil { log.Fatal(err) } log.Println("send len", len(msg)) ret, err := stream.Recv() if err == io.EOF { log.Println("recv eof") break } if err != nil { log.Println("recv error:", err) break } log.Println("recv len", len(ret.Msg)) time.Sleep(1 * time.Second) } }