【发布时间】:2014-03-29 17:18:40
【问题描述】:
在我最近构建的单页 web 应用程序中,我正在使用 Restangular 模块为我的模型获取数据。我想向应用程序添加实时更新,以便每当在服务器上更改或添加任何模型时,我都可以更新我的模型列表。
我已经看到这在 Trello 等网络应用中运行良好,您可以在不刷新网页的情况下查看更新。我确定 Trello 网络客户端使用 REST API。
什么是构建服务器和客户端来归档此文件的正确方法?
【问题讨论】:
在我最近构建的单页 web 应用程序中,我正在使用 Restangular 模块为我的模型获取数据。我想向应用程序添加实时更新,以便每当在服务器上更改或添加任何模型时,我都可以更新我的模型列表。
我已经看到这在 Trello 等网络应用中运行良好,您可以在不刷新网页的情况下查看更新。我确定 Trello 网络客户端使用 REST API。
什么是构建服务器和客户端来归档此文件的正确方法?
【问题讨论】:
首先,你的问题太笼统了,可以有很多依赖的解决方案 根据您的需求和条件。
我将为您简要概述 当您想离开 REST API 时的一个案例 并通过网络套接字添加一些实时。
从 REST 中获取所有数据——仅用于通知的 Soket。
优点: 易于实现服务器端和客户端。您只需要在服务器上发出事件 有关已修改资源的信息(如资源名称和 ID),并在客户端捕获这些事件并获取 REST API 的数据。
缺点: 每一次通知都会向服务器发出一个请求。当单个资源有很多活动客户端时,这会显着增加流量(它们会向服务器生成大量反向请求)。
从 REST 中获取初始负载——带有数据负载的通知的套接字。
优点:所有信息都随通知一起提供,不会对服务器产生新的请求,因此我们的流量较少。
缺点:更难实现服务器端和客户端。您需要将数据添加到服务器上的所有事件。您需要从客户端的所有事件中获取数据。
根据评论更新
至于处理不同类型的模型(只是一种方法)。
客户端。
factory。Created, Updated, Deleted)。initObject函数,它会通过ID和extend在缓存中找到实体,如果没有具有这样ID的实体,只需创建一个新实体并将其添加到缓存中。 Delete 只会从缓存中删除一个实体。任何时候你需要这个资源,你应该返回缓存对象的链接以保持双向数据绑定(这就是我使用extend而不是=的原因)。当然,您需要处理以下情况:“用户正在编辑资源,同时收到有关删除的通知”。
服务器端。
Create, Update, Delete 事件推送事件。NewTask、UpdateTask 事件。可以通过两种方式处理集合更改:添加/更新/删除集合中的项目或更改整个集合。
PUT, POST, DELETE 等所有修改当然都是使用 REST 进行的。
我为案例 1) 做了一个超级简单的伪要点。 https://gist.github.com/gpstmp/9868760 但它可以针对案例 2 进行更新,就像这样 https://gist.github.com/gpstmp/9900454
希望这会有所帮助。
【讨论】: