java - 带有 Spring 和 Redis 的 Vaadin 在缓慢的环境中加载以前的 UI 状态

标签 java spring serialization redis vaadin

我在 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 组件 transient 化。)

最佳答案

我们就我工作场所的问题进行了讨论,我们认为组件工作正常。当序列化比下一个请求的反序列化慢时,就会出现问题。 (每个 UI 更改都从反序列化开始,以获取最新状态,然后序列化修改后的状态。)我的解决方案是创建一个方面,用于存储为序列化发送的最新 VaadinSession,并将每个反序列化的 VaadinSession 与存储的 VaadinSession 进行比较。我保留了具有较高 lastProcessedClientToServerId 的那个。这几乎每次都能解决问题。

关于java - 带有 Spring 和 Redis 的 Vaadin 在缓慢的环境中加载以前的 UI 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50463333/

相关文章:

java - Spring-Boot Thymeleaf 以 html 形式加载图像,但列表不显示

java - Jackson:获取反序列化的空引用

动态表单创建/调查 Web 应用程序的数据库架构注意事项

java - HashMap 可序列化

java - 使用 Spring Batch 一个接一个地链接两个作业的最佳方法

java - jackson 反序列化问题与 map 中的 final类

java - 无效 key 异常 : invalid key format when reading EC Private Key from PEM file in Java

java - hibernate 教程

c# - C#和Java中继承的区别

java - 如果用户输入的数据类型不正确,则给出错误消息并重新启动循环,如果是,则继续循环?