我有一个服务器,该服务器为给定请求传输数据,以下是实现该功能的方法
@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();
}
当客户端断开连接时,服务器仍继续处理,这可能在多个客户端获取数据时出现。需要知道如何告诉服务器停止处理
答案 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;
}
}
这两种方法都可以在发生取消时提供通知,但对于您而言,轮询是最简单的。