我正在寻找一个库,它可以帮助我在我的服务器和我的 GUI 之间“实时”保持一些状态同步。我对消息传递和中间件进行了排序(推送更新等),但我需要的是一个协议,它可以保证数据在某个合理的有限时间内保持同步 - 错误/丢弃的消息/异常可能会导致数据失去同步几秒钟,但它应该重新同步或至少知道它在几秒钟内不同步。
这似乎应该是以前已经解决的问题,但我似乎找不到任何合适的东西 - 非常感谢任何帮助
更多细节 - 我有一个由 JMS 类型中间件提供服务的富客户端(Silverlight,但可能很快会迁移到 Javascript/C# 或 Java)GUI。我希望将一些数据交互重新设计为如下所示
每个用户对几个相当小的数据集都有自己的看法,例如:
- 权利(要显示的 GUI 元素)
- GUI 数据(例如填充下拉菜单等)
- 业务数据网格(例如订单网格)
- 首选项(例如 GUI 的布局方式)
所有这些数据集都可以在服务器上随时更改,数据应尽快在客户端更新。数据通过服务器更改——客户端请求更改(例如取消请求),服务器根据权利和业务规则对其进行验证,并更新其内部数据集,然后将更改发送回 GUI。为了提供用户反馈,可以在 gui(取消提交或类似)上设置中间状态,该状态被服务器响应覆盖。
目前的工作流程是:
- 用户认证
- GUI 从服务器下载初始数据集(从数据库或它缓存的其他一些业务对象加载它们)
- GUI 呈现
- GUI 下载业务数据的快照
- GUI 订阅业务数据的更新
- 随着 GUI 中的更新更新模型和屏幕上的视图
我正在寻找一个可以改进这一点的通用库
- 应该是使用有效载荷格式的跨语言(例如 Java 后端、C# 前端、protobuf 数据格式)
- 应该与传输无关(我们使用 JMS 样式的中间件,我们现在不想替换)
- 当服务器端数据集发生更改时,应向客户端发送更新
- 客户端和服务器应该能够检查更改以确保它们是最新的
- 发送的数据应该是最小的(最小增量)
- 客户端和服务器应该处理多个版本不同步
- 客户端应该能够在会话之间缓存到磁盘,然后在登录时获取增量。
我认为理想的解决方案将使用类似
- 任何对象(或对象树)都可以使用库代码注册(这应该适用于通过 Hibernate 加载的数据/对象)
- 当对象更改时,库会使用更改增量通知侦听器/回调
- 侦听器使用我的 JMS 将该增量发送到客户端
- 客户端获取更新并可以将其返回给库的客户端版本,这将更新对象的客户端版本
- 客户端应该从更新中获得足够的信息,以便能够决定需要采取哪些 UI 操作(通知用户、更新网格等)
- 客户端和服务器会定期检查它们是否在同一版本的对象上(例如,服务器将版本号发送给客户端),并且可以在必要时通过服务器发送增量或在必要时完全刷新来进行补救。
感谢您的任何建议