如何使用servicestack创建在线离线应用

How to create an online-offline application using servicestack

我正在尝试弄清楚如何创建在大型应用程序中使用的离线/在线方法。

现在,应用程序的每个部分都有自己的模型和数据层,它们直接从/向SQL读取/写入数据。我的老板要求我创建一种缓冲区,在连接失败的情况下,可以用来存储数据,直到 SQL return 的连接处于活动状态。

我正在尝试创建的是这样的:将所有数据层移动到服务堆栈服务中。每个 "GET" 方法都应该查询数据库并将结果存储到缓存中,以便在与 SQL 的连接不可用时重新使用。如果连接失败,每个 "POST" 和 "PUT" 方法都必须执行它们的操作或将请求存储到缓存中。恢复与 SQL 的连接后,必须清除此缓存。

我怎样才能做到这一点?我的是一个 WPF 应用程序 运行 Windows 10.

此致 恩里科

在服务器上维护缓存无助于创建离线应用程序,因为客户端无法访问服务器以检索这些缓存。相反,您需要的是在客户端维护状态,以便在网络访问丢失的情况下,客户端从其自己的本地缓存加载。

在架构上,这是使用单页应用程序框架的 Web 应用程序最容易实现的,例如 Vue (+ Vuex) or React (+ Redux or MobX). The ServiceStack TechStacks and Gistlyn Apps are good (well documented) examples of this where they store client state in a Vuex store (for TechStacks created in Vue) or Redux Store (for Gistlyn created in React), or the Old TechStacks(使用 AngularJS 创建)。

有关此结帐的良好示例Gistlyn's snapshots feature where the entire client state can be restored from a single serialized JSON object or approach used the Real Time Network Traveler example,其中初始客户端状态和增量可以通过网络序列化以实现对多个连接客户端的实时远程控制。

他们在开发时并没有考虑离线,但他们的架构自然会导致离线能力,这是由于每个页面首先从其本地存储加载然后触发更新其本地缓存的请求,这要归功于JS SPA fx 的反应性,页面自动更新为最新版本的服务器。

消息传递 API

HTTP 具有同步紧耦合,这对于离线通信来说并不理想,您想要的是设计您的写入 API,使它们成为一个 Way/Asynchronous 这样您就可以在客户端上实现一个消息队列,它排队请求 DTO 并通过重新发送它们(使用指数退避)将它们可靠地发送到服务器,直到成功而没有错误。然后,对于需要通知客户端他们的请求已被处理的情况,他们可以通过 Server Events 或通过客户端长轮询服务器检查他们的请求是否已被处理来完成。