首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Grpc服务器即使在客户端断开连接时也会继续处理数据

Grpc服务器即使在客户端断开连接时也会继续处理数据
EN

Stack Overflow用户
提问于 2018-06-28 18:12:14
回答 1查看 1.4K关注 0票数 4

我有一个服务器,它为给定的请求流式传输数据,下面是实现该功能的方法

代码语言:javascript
复制
@Override
public void getChangeFeed(ChangeFeedRequest request, StreamObserver<ChangeFeedResponse> responseObserver) {
    long queryDate = request.getFromDate();
    long offset = request.getPageNo();
    ChangeFeedResponse changeFeedResponse =  processData(responseObserver, queryDate, offset);

    while(true){
        if(changeFeedResponse!=null && !changeFeedResponse.getFinalize()){
            responseObserver.onNext(changeFeedResponse);
           changeFeedResponse = processData(responseObserver, changeFeedResponse.getToDate(), changeFeedResponse.getPageNo());
        }else{
            break;
        }
    }
    responseObserver.onNext(changeFeedResponse);
    responseObserver.onCompleted();
}

当客户端断开连接时,服务器仍会继续处理,当多个客户端正在获取数据时,这可能会出现问题。需要知道如何通知服务器停止处理

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-29 06:53:55

有两种完全等同的方法。一种是使用上下文,该上下文在RPC完成/取消时被取消:

代码语言:javascript
复制
while(!Context.current().isCancelled()){ // THIS LINE CHANGED
    if(changeFeedResponse!=null && !changeFeedResponse.getFinalize()){
        responseObserver.onNext(changeFeedResponse);
       changeFeedResponse = processData(responseObserver, changeFeedResponse.getToDate(), changeFeedResponse.getPageNo());
    }else{
        break;
    }
}

另一种方法是使用ServerCallStreamObserver:

代码语言:javascript
复制
// THE NEXT TWO LINES CHANGED
ServerCallStreamObserver scso = (ServerCallStreamObserver) responseObserver;
while(!scso.isCancelled()){
    if(changeFeedResponse!=null && !changeFeedResponse.getFinalize()){
        responseObserver.onNext(changeFeedResponse);
       changeFeedResponse = processData(responseObserver, changeFeedResponse.getToDate(), changeFeedResponse.getPageNo());
    }else{
        break;
    }
}

这两种方法还可以在发生取消时提供通知,但在您的情况下,轮询是最简单的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51080221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档