大佬教程收集整理的这篇文章主要介绍了Java spring SseEmitter / ResponseBodyEmitter:检测浏览器重新加载,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Java Spring中使用服务器端事件(SSE).每当新客户端订阅事件服务时,我在REST控制器上执行以下代码:
SseEmitter emitter = new SseEmitter(-1L);
emitter.onCompletion(() -> {
logger.debug(tag + "Emitter completed.");
emitters.remove(emitter);
});
return emitter;
然后,每当需要将事件通知给我执行的客户端时:
for (ResponseBodyEmitter emitter: emitters) {
emitter.send("message #1");
}
问题是当其中一个客户端重新加载浏览器时,发射器没有完成(正如我所料),并且在调用上面的代码时我得到一个损坏的管道异常.只有在触发此异常后,我才会看到发射器已完成.
有没有办法解决这个问题?
我建议你尝试检测它是同一个客户端连接,然后在旧发射器上显式调用完成.
在我的情况下,我可以根据Eventsource传入的令牌检测到这一点作为URL参数.当我将新创建的发射器挂钩到“用户对象”时,我确保在将新的发射器分配给用户字段变量之前完成前一个发射器.
从您的代码中,您似乎有一个列表或一组发射器.你可以把它改成地图,你有一些客户端身份作为密钥,发射器作为值吗?
我无法准确地告诉您要用作客户身份的信息,因为这完全取决于您的应用程序.在我的例子中,它是一个JWT令牌,但你可以简单地创建一个客户编号方案……
以上是大佬教程为你收集整理的Java spring SseEmitter / ResponseBodyEmitter:检测浏览器重新加载全部内容,希望文章能够帮你解决Java spring SseEmitter / ResponseBodyEmitter:检测浏览器重新加载所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。