gpt4 book ai didi

瓦丁 14 : remove broadcast registration on page refresh

转载 作者:行者123 更新时间:2023-12-04 12:20:24 25 4
gpt4 key购买 nike

我按照 Vaadin 教程 ( Creating Collaborative Views ) 进行广播事件并注册。

Registration eventRegistration;

@Override
protected void onAttach(AttachEvent attachEvent) {
log.debug("In attach...");
UI ui = attachEvent.getUI();
eventRegistration= Broadcaster.register(
"eventName",
message -> ui.access(() -> {
log.debug("Request to refresh grid...");
presenter.refreshGrid();
ui.push();
}));
}

@Override
protected void onDetach(DetachEvent detachEvent) {
log.debug("In detach...");
if(eventRegistration != null) {
eventRegistration.remove();
eventRegistration = null;
}
}
一切正常,除了刷新页面时, onDetach() 中的逻辑不被执行。但是,刷新后,您将输入 onAttach()方法。因此,您实际上将注册几个“相同”的监听器,而无需删除前一个监听器,并且实际上获得了两倍的监听器。 onDetach()例如,仅当您转到另一个菜单项时才能访问方法。
您可以在下面找到示例日志。
application log
Vaadin 推荐的在刷新之前/期间删除这些监听器的方法是什么?

最佳答案

onDetach方法应该最终被调用。
当您关闭或刷新选项卡时,不会向服务器发送任何事件,因此服务器不知道应该分离旧 UI。
这是heartbeat requests的地方进来。UIs默认每5分钟发送一次心跳请求,如果服务器发现旧UI错过了三个心跳,它将被分离。或者,它会在 session 到期时被分离。
换句话说,onDetach方法应该在大约 20 分钟后调用。
The reason no event is sent to the server when the tab is closed or refreshed is that this could prevent the tab from refreshing/closing while the request is being handled, which is bad user experience.此外,这不包括计算机关闭或网络断开连接的情况。
有一种叫做 Beacon API 的东西,可用于在选项卡刷新或关闭时通知服务器,而不会导致浏览器延迟。有an issue使用它来立即分离 UI。

关于瓦丁 14 : remove broadcast registration on page refresh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67702535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com