即使客户端断开连接,Grpc Server也会继续处理数据

时间:2018-06-28 10:12:14

标签: java grpc grpc-java

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

@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();
}

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

1 个答案:

答案 0 :(得分:4)

有两种相当等效的方法。一种是使用上下文,当RPC完成/取消后,上下文将被取消:

<div id="video-js-box">
<video id="example_video_1" class="video-js" controls preload="auto" 
width="640" height="264" data-setup="{}">
            <source src="videolink" type='video/mp4'>
</video>
</div>

    <script type="text/javascript">
    var isPause = 0;
    var pausetime = 5; 
    var myPlayer = videojs('example_video_1');

    myPlayer.on('timeupdate', function(e) {
        if (isPause == 0 && (myPlayer.currentTime() >= pausetime)) {
            myPlayer.pause();

            wait();
            jQuery('#video-js-box').hide();
            jQuery('#video-js-box').remove();
        }
    });

    function wait() {
        $("#myModall").modal('show');

    }

    </script>

另一种方法是使用ServerCallStreamObserver:

while(!Context.current().isCancelled()){ // THIS LINE CHANGED
    if(changeFeedResponse!=null && !changeFeedResponse.getFinalize()){
        responseObserver.onNext(changeFeedResponse);
       changeFeedResponse = processData(responseObserver, changeFeedResponse.getToDate(), changeFeedResponse.getPageNo());
    }else{
        break;
    }
}

这两种方法都可以在发生取消时提供通知,但对于您而言,轮询是最简单的。

相关问题