Service gRPC重复场与流

Service gRPC重复场与流,service,grpc,proto,Service,Grpc,Proto,嗨,我现在正在研究grpc,我很好奇重复字段和流的用法。 例如,假设我想要实现电影座位的预订服务。我面临的问题是,我想通知服务部我想为哪部电影预订座位。 我可以想出两种解决方案,首先: 我将电影的id与我想预订的每个座位一起发送,或者在流的开头发送其中一个 像这样: rpc ReserveSeatsForShowing(stream SeatReservationRequest) returns(Reservation); message SeatReservationRequest{

嗨,我现在正在研究grpc,我很好奇重复字段和流的用法。 例如,假设我想要实现电影座位的预订服务。我面临的问题是,我想通知服务部我想为哪部电影预订座位。 我可以想出两种解决方案,首先: 我将电影的id与我想预订的每个座位一起发送,或者在流的开头发送其中一个 像这样:

rpc ReserveSeatsForShowing(stream SeatReservationRequest) returns(Reservation);

message SeatReservationRequest{
    oneof reservationOneOf{
        int32 showingId = 1;
        SeatReservation seatReservation = 2;
    }
}
或者使用这样的重复字段

rpc ReserveSeatsForShowing(SeatReservationRequest) returns(Reservation);

message SeatReservationRequest{
    int32 showingId = 1;
    repeated SeatReservation seatReservation = 2;
}
因为我以前没有真正与grpc合作过,所以我不太确定该选择哪个选项,或者是否有其他选项可用


期待您对座位预订的建议,我认为使用重复字段是有意义的。就像现实世界中的场景一样,请求就像“我想要电影X的座位A、B、C”,这更像是重复的方式,而不是流媒体。因此,有效载荷非常小。此外,由于这是一个批处理过程,因此这种方法应该使用较少的服务器资源。

如果我可以问的话,另一个问题。使用双方向流实现分页系统是否合法。这意味着流中的第一条消息是请求,一旦客户端发送消息,服务器就会用下一条
n
消息进行响应,除非您的客户端能够利用(响应时呈现格式等)流的好处,否则我仍然会重复使用。如果客户端将等待到N,则呈现结果页。我会采取更简单的方法,即批处理。流媒体有点棘手,发送传感器数据就是一个很好的例子。但是,如果流式处理比批处理有好处,那么您可以始终使用流式处理。