main_cli.go 1004 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "io"
  6. "log"
  7. "math"
  8. "research/grpc_msg_size/pb"
  9. "time"
  10. "google.golang.org/grpc"
  11. )
  12. func init() {
  13. log.SetFlags(log.Lmicroseconds | log.LstdFlags | log.Lshortfile)
  14. }
  15. var msg string
  16. func init() {
  17. var buf []byte
  18. for i := 0; i < 1024*1024*1024; i++ {
  19. buf = append(buf, '0')
  20. }
  21. msg = string(buf)
  22. }
  23. func main() {
  24. addr := fmt.Sprintf("localhost:%v", 55555)
  25. conn, err := grpc.Dial(addr, grpc.WithInsecure())
  26. if err != nil {
  27. log.Fatal(err)
  28. }
  29. defer conn.Close()
  30. client := pb.NewTestClient(conn)
  31. stream, err := client.Test(context.Background(), grpc.MaxCallRecvMsgSize(math.MaxInt32))
  32. for {
  33. err := stream.Send(&pb.Request{
  34. Msg: msg,
  35. })
  36. if err != nil {
  37. log.Fatal(err)
  38. }
  39. log.Println("send len", len(msg))
  40. ret, err := stream.Recv()
  41. if err == io.EOF {
  42. log.Println("recv eof")
  43. break
  44. }
  45. if err != nil {
  46. log.Println("recv error:", err)
  47. break
  48. }
  49. log.Println("recv len", len(ret.Msg))
  50. time.Sleep(1 * time.Second)
  51. }
  52. }