java - 使用 Spring 和 Redis 的 Vaadin 在慢速环境中加载之前的 UI 状态
问题描述
我在 spring boot + vaadin 应用程序中成功启用了 redis,它在我的计算机上运行良好。该应用程序在较慢的环境中进行测试运行,并且多次出现错误。
WARN c.v.s.communication.ServerRpcHandler [ServerRpcHandler.java : 266] - Unexpected message id from the client. Expected: 248, got: 249
当 VaadinSession 的序列化/反序列化花费太长时间时,似乎会发生这种情况。例如,我有一个包含多个复选框的页面。我点击第一个,然后是第二个和第三个。在此之后,上面的警告被抛出并出现页面的先前状态。在这种情况下,它可能没有任何选中的复选框或带有一两个选中的复选框。在极少数情况下,它可以正常工作。
我想不出解决问题的办法。我尝试过的一件事是立即显示加载指示器(100 毫秒)(默认是加载 300 毫秒后),但这并不能解决问题。
我可以以某种方式配置何时发生序列化/反序列化而不是每次 UI 更改,或者通过将部分 VaadinSession 排除在外来使其更快?(我需要当前页面上的数据,所以我不能让 ui 组件瞬态。)
解决方案
我们就我工作场所的问题进行了讨论,我们认为这些组件工作正常。当序列化比下一个请求的反序列化慢时,就会出现问题。(每个 UI 更改都从反序列化开始,以获取最新状态,然后序列化修改后的状态。)我的解决方案是创建一个切面,用于存储发送用于序列化的最新 VaadinSession,并将每个反序列化的 VaadinSession 与存储的 VaadinSession 进行比较。我保留 lastProcessedClientToServerId 较高的那个。这几乎每次都能解决问题。
推荐阅读
- c# - 如何在 ASP.NET Core 端点中抑制来自 NewtonsoftJson 的 JSON 错误响应?
- ruby - 将函数传递到类和数组中
- sql - 编写查询以使用 sql 从字符串中查找第二个最佳单词
- node.js - 如何使用 SSL 在本地端口 80-443 上使用 DDEV Web 容器公开 Nodejs 应用程序
- c - 如何使用 malloc 为嵌入在父结构中的包含 char 指针分配空间。我只能访问包含结构指针
- javascript - 就我而言,我想将导出按钮放入下拉列表
- javascript - 如何获取嵌套子元素的属性
- redirect - 使用 ReactorClientHttpConnector 的 webClient 的最大跟随重定向数
- vba - VBA For-Next 循环在 255 次迭代后变慢
- javascript - 我想选择 .main-head(1-9) 并执行一个功能