我正在寻找一个库,可以帮助我在服务器和GUI之间"实时"保持某种状态同步。我已经对消息传递和中间件进行了排序(推送更新等(,但我需要的是一个协议,它保证数据在合理的有限时间内保持同步 - 错误/丢弃的消息/异常可能会导致数据在几秒钟内失去同步,但它应该重新同步或至少知道它在几秒钟内不同步。
这似乎应该是以前已经解决过的事情,但我似乎找不到任何合适的东西 - 任何帮助非常感谢
更多细节 - 我有一个由JMS类型中间件提供的富客户端(Silverlight,但可能很快就会迁移到Javascript/C#或Java(GUI。我希望重新设计一些数据交互
,如下所示每个用户对几个相当小的数据集都有自己的视图,例如:
- 权利(要显示哪些 GUI 元素(
- GUI 数据(例如填充下拉菜单等(
- 业务数据网格(例如订单网格(
- 首选项(例如 GUI 的布局方式(
所有这些数据集都可以随时在服务器上更改,并且数据应尽快在客户端上更新。数据通过服务器更改 – 客户端请求更改(例如取消请求(,服务器根据权利和业务规则对其进行验证,并更新其内部数据集,然后将更改发送回 GUI。为了向用户提供反馈,可以在 gui 上设置临时状态(取消提交或类似(,这是服务器响应覆盖的状态。
目前,工作流程是:
- 用户身份验证 GUI 从服务器
- 下载初始数据集(服务器从数据库或缓存的其他一些业务对象加载它们(
- 图形用户界面渲染
- GUI 下载业务数据的快照
- GUI 订阅业务数据的更新
- 随着 GUI 的更新,屏幕上的模型和视图会更新
我正在寻找一个通用库来改善这一点
- 应该是跨语言的,使用有效的有效负载格式(例如Java后端,C#前端,protobuf数据格式(
- 应该是与传输无关的(我们使用我们现在不想替换的 JMS 风格的中间件(
- 当服务器端数据集发生更改时,应向客户端发送更新
- 客户端和服务器应该能够检查更改以确保它们是最新的
- 发送的数据应为最小值(最小增量(
- 客户端和服务器应应对多个修订版不同步的情况
- 客户端应该能够在会话之间缓存到磁盘,然后在登录时获取增量。
我认为理想的解决方案是使用类似的东西
- 任何对象(
- 或对象树(都可以使用库代码注册(这应该适用于通过Hibernate加载的数据/对象(
- 当对象更改时,库会通知侦听器/回调更改增量
- 侦听器使用我的 JMS 将该增量发送到客户端 客户端
- 获取更新,并可以将其返回给库的客户端版本,该版本将更新对象的客户端版本
- 客户端应从更新中获取足够的信息,以便能够决定需要采取哪些 UI 操作(通知用户、更新网格等( 客户端
- 和服务器定期检查它们是否位于对象的同一版本上(例如,服务器将版本号发送到客户端(,并在必要时通过服务器发送增量或在必要时进行完全刷新来修复。
感谢您的任何建议
哇,好多!
我有一个项目正在进行中,该项目在前端处理Javascipt中的同步方面。有一个用 Node 编写的测试服务器.JS(一旦客户端被解决,实际上很容易(。
基本上,数据按键存储在数据集中,并且每个单独的键都经过版本控制。服务器具有所有数据的所有版本,客户端可以从服务器获取更改。在客户端和服务器上修改某些内容时的版本冲突由冲突解决回调处理。
它不完整,事实上它目前只有内存存储,但这会在新的一周左右发生变化。
实际的通知/下载和上传超出了库的范围,但您可以使用 Sockets.IO。
它目前与jQuery,Dojo和NodeJS一起使用,实际上它几乎没有任何依赖项。
该项目(带演示(位于 https://github.com/forbesmyester/SyncIt