我正在开发一个 Web 应用程序,它应该查询 Web 服务(ASP.NET Web API)以获取某些数据,并可视化结果。当客户端应用程序运行时,查询的数据可能会发生变化,因为项目可能会添加到相应的数据库集合中或从相应的数据库集合中删除。客户端本身或其他客户端都可以修改集合(通过 Web 服务)。数据库服务器RavenDB能够将更改通知其客户端(Web 服务)。
我想知道的是,当 Web 服务中的数据发生变化时,客户端应该如何保持最新状态?具体来说,如果 Web 服务的数据库发生变化,导致客户端的数据视图变得过时,客户端应该会收到新的查询结果。保持与客户端的持久连接是否是个好主意,例如通过SignalR,并在每次对数据库进行更改时简单地通知它们,以便每个客户端都可以重新查询数据?如果这些更改通知变得过于频繁,是否应该限制它们?
示例场景
该数据库包含以下项目(JSON 表示法):
[{"Id": "2", "User": "usera"}, {"Id": "1", "User": "usera"},
{"Id": "3", "User": "userb"}, {"Id": "4", "User": "usera"}]
客户端 A 请求 User == "usera" 的项目,分页到最多 2 个项目并按 Id 排序;该服务返回以下集合:
[{"Id": "1", "User": "usera"}, {"Id": "2", "User": "usera"}]
然后客户端 B 告诉服务删除以下项:{"Id": "2", "User": "usera"}
,使数据库变为:
[{"Id": "1", "User": "usera"}, {"Id": "3", "User": "userb"},
{"Id": "4", "User": "usera"}]
现在的问题是,Web 服务如何通知客户端 A 它应该重新查询新数据?也就是说,客户端 A 应刷新其视图以包含以下内容:
[{"Id": "1", "User": "usera"}, {"Id": "4", "User": "usera"}]