當前位置: 首頁>>代碼示例>>Golang>>正文


Golang Stream.Trailer方法代碼示例

本文整理匯總了Golang中google/golang.org/grpc/transport.Stream.Trailer方法的典型用法代碼示例。如果您正苦於以下問題:Golang Stream.Trailer方法的具體用法?Golang Stream.Trailer怎麽用?Golang Stream.Trailer使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在google/golang.org/grpc/transport.Stream的用法示例。


在下文中一共展示了Stream.Trailer方法的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。

示例1: recvResponse

// recvResponse receives and parses an RPC response.
// On error, it returns the error and indicates whether the call should be retried.
//
// TODO(zhaoq): Check whether the received message sequence is valid.
func recvResponse(dopts dialOptions, t transport.ClientTransport, c *callInfo, stream *transport.Stream, reply interface{}) error {
	// Try to acquire header metadata from the server if there is any.
	var err error
	defer func() {
		if err != nil {
			if _, ok := err.(transport.ConnectionError); !ok {
				t.CloseStream(stream, err)
			}
		}
	}()
	c.headerMD, err = stream.Header()
	if err != nil {
		return err
	}
	p := &parser{r: stream}
	for {
		if err = recv(p, dopts.codec, stream, dopts.dc, reply, math.MaxInt32); err != nil {
			if err == io.EOF {
				break
			}
			return err
		}
	}
	c.trailerMD = stream.Trailer()
	return nil
}
開發者ID:otsimo,項目名稱:catalog,代碼行數:30,代碼來源:call.go

示例2: recvResponse

// recvResponse receives and parses an RPC response.
// On error, it returns the error and indicates whether the call should be retried.
//
// TODO(zhaoq): Check whether the received message sequence is valid.
func recvResponse(dopts dialOptions, t transport.ClientTransport, c *callInfo, stream *transport.Stream, reply interface{}) error {
	// Try to acquire header metadata from the server if there is any.

	// 如何接受請求呢?
	// 1. 和處理的Http請求類似, 首先是: 處理Header
	var err error
	c.headerMD, err = stream.Header()
	if err != nil {
		return err
	}

	// 2. 然後處理stream
	p := &parser{r: stream}
	for {
		// stream --> (parser) --> msg --> decompress --> unmarshal --> reply
		// Iter 1: 讀取到Reply
		// Iter 2: 讀取失敗,碰到EOF
		if err = recv(p, dopts.codec, stream, dopts.dc, reply); err != nil {
			// 似乎需要等待stream的EOF
			if err == io.EOF {
				break
			}
			return err
		}
	}

	// 3. 獲取Trailer?
	c.trailerMD = stream.Trailer()
	return nil
}
開發者ID:wfxiang08,項目名稱:grpc-go,代碼行數:34,代碼來源:call.go

示例3: recv

// recv receives and parses an RPC response.
// On error, it returns the error and indicates whether the call should be retried.
//
// TODO(zhaoq): Check whether the received message sequence is valid.
func recv(t transport.ClientTransport, c *callInfo, stream *transport.Stream, reply proto.Message) error {
	// Try to acquire header metadata from the server if there is any.
	var err error
	c.headerMD, err = stream.Header()
	if err != nil {
		return err
	}
	p := &parser{s: stream}
	for {
		if err = recvProto(p, reply); err != nil {
			if err == io.EOF {
				break
			}
			return err
		}
	}
	c.trailerMD = stream.Trailer()
	return nil
}
開發者ID:gameduell,項目名稱:kythe,代碼行數:23,代碼來源:call.go

示例4: recvResponse

// recvResponse receives and parses an RPC response.
// On error, it returns the error and indicates whether the call should be retried.
//
// TODO(zhaoq): Check whether the received message sequence is valid.
// TODO ctx is used for stats collection and processing. It is the context passed from the application.
func recvResponse(ctx context.Context, dopts dialOptions, t transport.ClientTransport, c *callInfo, stream *transport.Stream, reply interface{}) (err error) {
	// Try to acquire header metadata from the server if there is any.
	defer func() {
		if err != nil {
			if _, ok := err.(transport.ConnectionError); !ok {
				t.CloseStream(stream, err)
			}
		}
	}()
	c.headerMD, err = stream.Header()
	if err != nil {
		return
	}
	p := &parser{r: stream}
	var inPayload *stats.InPayload
	if stats.On() {
		inPayload = &stats.InPayload{
			Client: true,
		}
	}
	for {
		if err = recv(p, dopts.codec, stream, dopts.dc, reply, math.MaxInt32, inPayload); err != nil {
			if err == io.EOF {
				break
			}
			return
		}
	}
	if inPayload != nil && err == io.EOF && stream.StatusCode() == codes.OK {
		// TODO in the current implementation, inTrailer may be handled before inPayload in some cases.
		// Fix the order if necessary.
		stats.Handle(ctx, inPayload)
	}
	c.trailerMD = stream.Trailer()
	return nil
}
開發者ID:rnaveiras,項目名稱:vault,代碼行數:41,代碼來源:call.go


注:本文中的google/golang.org/grpc/transport.Stream.Trailer方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。