首页 > 解决方案 > gRPC 重复字段与流

问题描述

嗨,我目前正在研究 grpc,我对重复字段与流的使用用法感到好奇。例如,假设我想为电影座位实现预订服务。我面临的问题是,我想通知服务我想为哪部电影预订座位。我可以想到 2 个解决方案,首先:我将电影的 id 发送到我想预订的每个座位上,或者在流的开头使用 oneof,如下所示:

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。

期待您的建议

标签: servicegrpcproto

解决方案


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


推荐阅读