gpt4 book ai didi

stream - gRPC 流服务只能有一个参数的原因

转载 作者:行者123 更新时间:2023-12-03 19:25:59 25 4
gpt4 key购买 nike

目前,gRPC 服务定义只能有一个参数,即使它是一个流服务,这使得表示“初始”请求具有挑战性。例如,考虑一个用户可以加入聊天室的聊天应用程序。

在这种情况下,域可以建模如下。

message JoinRoomRequest {
required string room = 1;
}

message ChatMessage {
required string content = 2;
}

聊天应用程序的消费者将发送加入请求并启动双向消息流,因此可以用这种方式描述服务。

service SimpleChat {
rpc joinChatRoom (JoinRoomRequest, stream ChatMessage) returns (stream ChatMessage);
}

但是,在 gRPC 中,上述语法无效。表示所描述的聊天服务的唯一方法是

service SimpleChat {
rpc joinChatRoom (stream ChatMessage) returns (stream ChatMessage);
}

这个决定背后的原因是什么,以及如何在 gRPC 中建模类似的域?

最佳答案

简单。将请求/响应建模为单个有效负载而不是可变参数要容易得多,尤其是在您希望多重性不同的情况下 - 例如,这意味着什么

(A, stream B, C, stream D)

而且......如果你可以获取多个元素,你也可以返回多个元素吗?毕竟,许多语言都支持这个概念。

不,接收(作为输入或输出)请求或单一类型的请求流要容易得多。

在您的场景中,也许可以将请求类型视为所有实际预期消息的 oneof (区分联合)的事物包装器,并且只需让您的代码强制第一个是“加入”:

message ChatRequest {
oneof RequestType {
JoinRoomRequest join = 1;
ChatMessage message = 2;
}
}

并取一个 ChatRequest

关于stream - gRPC 流服务只能有一个参数的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57238638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com