gRPC四种service method介绍
2022-03-02 本文已影响0人
糖醋沼跃鱼
gRPC四种service method介绍
首先gRPC是基于HTTP2.0的
- 最简单的RPC,客户端使用存根向服务器发送请求,然后等待响应,就像正常的函数调用。
// Obtains the feature at a given position.
rpc GetFeature(Point) returns (Feature) {}
- 服务器端的流式RPC(server-side streaming RPC),客户端向服务端发送请求后,获得流式响应,从中读取连续的消息。客户端会一直从返回的流中获取消息,直到没有新消息。在响应类型前加上stream关键字,即可得到服务端的流式RPC。
// Obtains the Features available within the given Rectangle. Results are
// streamed rather than returned at once (e.g. in a response message with a
// repeated field), as the rectangle may cover a large area and contain a
// huge number of features.
rpc ListFeatures(Rectangle) returns (stream Feature) {}
- 有服务端就有客户端流式RPC(client-side streaming RPC),客户端发送连续消息给服务器,当客户端停止发送消息后,等待服务端读取所有信息后返回响应,通过在请求类型前加上stream关键字来定义一个客户端流式RPC。
// Accepts a stream of Points on a route being traversed, returning a
// RouteSummary when traversal is completed.
rpc RecordRoute(stream Point) returns (RouteSummary) {}
- 双向流式RPC(bidirectional streaming RPC)两边同时发送(服务端返回响应也算是发送)连续消息通过读写流(read-write stream),两个流相互独立,所以客户端和服务端可以根据他们想要的顺序去读写。举个例子,服务器端可以等待所有的客户端消息都收到后,才给予响应,或者服务端可以读取一条或几条消息,开始返回响应,亦或是其他的独写组合。消息的顺序在流中是固定的。通过在请求类型和响应类型前同事加上stream关键字定义双向流式RPC.
// Accepts a stream of RouteNotes sent while a route is being traversed,
// while receiving other RouteNotes (e.g. from other users).
rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}