我有一个服务器端流式gRPC服务,该服务可能很快就会收到消息。拥有客户端功能的一个好方法是,知道此onNext执行准备在UI中显示时,已经有更多更新排队了,因为我只是简单地显示下一个。
StreamObserver< Info > streamObserver = new StreamObserver< info >( )
{
@Override
public void onNext( Info info )
{
doStuffForALittleWhile();
if( !someHasNextFunction() )
render();
}
}
有一些我不知道的下一步功能或检测方法吗?
答案 0 :(得分:1)
没有API可以确定是否已收到其他消息,但尚未将其传递给应用程序。
使用更高级的ClientCall / ClientCall.Listener API实现客户端存根API(例如StreamObserver
)。它不提供任何已收到但尚未发送的提示。
在内部,gRPC延迟处理消息。 gRPC等待,直到应用程序准备好接收更多消息(通常通过从StreamObserver.onNext()
返回)来尝试解码另一条消息。如果它解码了另一条消息,那么它将立即开始传递该消息。
答案 1 :(得分:1)
一种方法是使用onNext的消息创建一个小的缓冲区。这样一来,您就应该将当前的消息发送出去,然后查看是否在此同时到达了另一个消息。