gRPC 双向流媒体服务器是否可以乱序响应客户端?
网络上的所有示例都显示服务器仅响应传入请求。
StreamObserver 接口包含响应请求的响应
在onNext方法中,StreamObserver参数是否可以缓存并在以后重用以发送消息?
我需要什么:
我在第一次请求 Client1 时缓存了 StreamObserver
应客户2的请求,我需要向客户1
使用缓存的 StreamObserver 对象会引发 CANCELED 错误,我注意到 onComplete 被调用用于来自 Client1 的第一个请求
有没有办法做到这一点 ?
This 似乎是一个类似的问题,但在 2015 年不受支持,我不确定现在是否可行
答案 0 :(得分:0)
一旦服务器收到 StreamObserver
以响应客户端,它可以随时从任何线程调用该对象(尽管该对象不是线程安全的,因此不允许并发调用)。无需将其与 onNext()
中的传入请求耦合。
客户端调用onComplete()
是正常的,不会结束RPC。但是,如果您的代码转向并调用 onComplete()
,那么此时您将无法再在流上发送任何消息。您可能希望观察客户端取消,这可以通过将 StreamObserver
强制转换为 ServerCallStreamObserver
并在 RPC 开始时调用 setOnCancelHandler(Runnable)
来实现。