MCPcopy
hub / github.com/grpc/grpc-go / StreamingCall

Method StreamingCall

benchmark/benchmark.go:92–137  ·  view source on GitHub ↗
(stream testgrpc.BenchmarkService_StreamingCallServer)

Source from the content-addressed store, hash-verified

90const PreloadMsgSizeHeader = "preload-msg-size"
91
92func (s *testServer) StreamingCall(stream testgrpc.BenchmarkService_StreamingCallServer) error {
93 preloadMsgSize := 0
94 if md, ok := metadata.FromIncomingContext(stream.Context()); ok && len(md[PreloadMsgSizeHeader]) != 0 {
95 val := md[PreloadMsgSizeHeader][0]
96 var err error
97 preloadMsgSize, err = strconv.Atoi(val)
98 if err != nil {
99 return fmt.Errorf("%q header value is not an integer: %s", PreloadMsgSizeHeader, err)
100 }
101 }
102
103 if md, ok := metadata.FromIncomingContext(stream.Context()); ok && len(md[UnconstrainedStreamingHeader]) != 0 {
104 return s.UnconstrainedStreamingCall(stream, preloadMsgSize)
105 }
106 response := &testpb.SimpleResponse{
107 Payload: new(testpb.Payload),
108 }
109 preloadedResponse := &grpc.PreparedMsg{}
110 if preloadMsgSize > 0 {
111 setPayload(response.Payload, testpb.PayloadType_COMPRESSABLE, preloadMsgSize)
112 if err := preloadedResponse.Encode(stream, response); err != nil {
113 return err
114 }
115 }
116 in := new(testpb.SimpleRequest)
117 for {
118 // use ServerStream directly to reuse the same testpb.SimpleRequest object
119 err := stream.(grpc.ServerStream).RecvMsg(in)
120 if err == io.EOF {
121 // read done.
122 return nil
123 }
124 if err != nil {
125 return err
126 }
127 if preloadMsgSize > 0 {
128 err = stream.SendMsg(preloadedResponse)
129 } else {
130 setPayload(response.Payload, in.ResponseType, int(in.ResponseSize))
131 err = stream.Send(response)
132 }
133 if err != nil {
134 return err
135 }
136 }
137}
138
139func (s *testServer) UnconstrainedStreamingCall(stream testgrpc.BenchmarkService_StreamingCallServer, preloadMsgSize int) error {
140 maxSleep := 0

Callers

nothing calls this directly

Calls 9

EncodeMethod · 0.95
FromIncomingContextFunction · 0.92
setPayloadFunction · 0.85
ContextMethod · 0.65
ErrorfMethod · 0.65
RecvMsgMethod · 0.65
SendMsgMethod · 0.65
SendMethod · 0.65

Tested by

no test coverage detected