微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

gRPC 双向流媒体服务器可以向当前没有响应的客户端发送消息吗?

如何解决gRPC 双向流媒体服务器可以向当前没有响应的客户端发送消息吗?

gRPC 双向流媒体服务器是否可以乱序响应客户端?
网络上的所有示例都显示服务器仅响应传入请求。
StreamObserver 接口包含响应请求的响应
onNext方法中,StreamObserver参数是否可以缓存并在以后重用以发送消息?
我需要什么:
我在第一次请求 Client1 时缓存了 StreamObserver
应客户2的请求,我需要向客户1

发送消息

使用缓存的 StreamObserver 对象会引发 CANCELED 错误,我注意到 onComplete 被调用用于来自 Client1 的第一个请求
有没有办法做到这一点 ?
This 似乎是一个类似的问题,但在 2015 年不受支持,我不确定现在是否可行

解决方法

一旦服务器收到 StreamObserver 以响应客户端,它可以随时从任何线程调用该对象(尽管该对象不是线程安全的,因此不允许并发调用)。无需将其与 onNext() 中的传入请求耦合。

客户端调用onComplete()是正常的,不会结束RPC。但是,如果您的代码转向并调用 onComplete(),那么此时您将无法再在流上发送任何消息。您可能希望观察客户端取消,这可以通过将 StreamObserver 强制转换为 ServerCallStreamObserver 并在 RPC 开始时调用 setOnCancelHandler(Runnable) 来实现。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。