GRPC Java 服务器服务

Posted

技术标签:

【中文标题】GRPC Java 服务器服务【英文标题】:GRPC Java Server Service 【发布时间】:2018-05-16 09:37:44 【问题描述】:

如何在调用任何操作服务时触发服务器端流服务 由客户?目前流服务器只能在客户端调用时发送响应。

【问题讨论】:

【参考方案1】:

我认为这是不可能的。 gRPC 是请求/响应类型的协议。客户端必须调用相关的流式 RPC 才能让服务器进行流式传输。

【讨论】:

有可能。我们使用 Golang 制作了 GRPC 服务器并实现了相同的功能。 (即在调用任何操作服务时触发服务器端流服务)。我不知道如何用Java做。考虑一个示例,服务器希望不断向房间中的现有玩家流式传输有关已加入房间/服务器的玩家的信息。【参考方案2】:

我今天解决了这个问题。当用户订阅流时,将订阅请求和流观察器保存在数组列表/普通列表中。稍后当调用任何操作服务时。创建流服务的新实例(扩展 ServerStreamServiceGrpc.ServerStreamServiceImplBase)并使用数组列表中的参数从这个新实例调用所需的流服务。您不需要使用与创建服务器相同的服务实例。当用户取消订阅流时,只需从数组列表中删除该订阅即可。确保当您从流服务发送任何数据时不会调用 onCompleted(),因为它将终止订阅。这里的流媒体是指服务器端流媒体。

【讨论】:

以上是关于GRPC Java 服务器服务的主要内容,如果未能解决你的问题,请参考以下文章

GRPC Java 服务器服务

grpc 完成异步 java 服务请求/响应映射

java版gRPC实战之二:服务发布和调用

gRPC -- 在 Protobuf 中将 .png 图像从 Java 客户端发送到 Python 服务器

java 实现grpc服务间调用工程

如何在 gRPC 中为 Java 手动生成客户端和服务器代码?