【问题标题】:SignalR & browsers Local Storage Use CaseSignalR 和浏览器本地存储用例
【发布时间】:2016-09-20 15:31:25
【问题描述】:

在我花时间制作这个原型之前,我想我会征求其他人的意见。

我在网页上有一个列表,当用户超出范围(蜂窝、无线等)时,我需要用户能够对每个列表项的数据进行更改,并使更改在本地持续存在,直到连接已重新建立。

所以我的想法是使用 SignalR 和浏览器本地存储来实现这一点。

SignalR 是发送/接收实时数据的连接。

如果连接状态为已连接,我照常进行,实时提交表单更改。

如果连接状态为断开连接,则使用本地存储存储修改后的表单数据,直到与hub重新连接,此时我将数据发布到服务器进行保存。

任何人都可以在这方面打洞吗?优点缺点?更好的方法?

我的堆栈是 JavaScript、HTML5、C# API

提前感谢您的想法。

【问题讨论】:

    标签: javascript c# signalr local-storage


    【解决方案1】:

    在 ASP.NET Web API 中使用过 SignalR,我当然会推荐它。

    确保满足所有要求,以允许 SignalR 使用“WebSockets”进行连接,因为这是真正的双向连接,将提供检测断开连接的最佳方法。

    如果 SignalR 无法使用 Web 套接字,则它会退回到诸如“服务器发送事件”之类的机制,这种机制工作得很好,只是不如 Web 套接字。

    请参阅http://www.asp.net/signalr/overview/getting-started/supported-platforms,了解有关使用 SignalR 的 Web 套接字的最低要求的信息。

    【讨论】:

    • serverSentEvents 未轮询 - 服务器正在以流方式将数据推送到客户端
    • 在测试中我注意到 serverSentEvents 有一种保持活动的形式,因此假设连接方法是一种轮询形式。调整后的答案,谢谢。
    【解决方案2】:

    SignalR不应该用于提交数据和从服务器检索数据,您应该只在您希望服务器通知客户端(浏览器/移动/桌面)有关某些事件时使用它,收到通知后您可以查询服务器获取最新数据。

    在您的情况下,您可以查看专门为此目的构建的 Ado.Net 数据服务。

    如果您想使用浏览器本地存储来执行此操作,那么您始终可以将数据保存到服务器,以防出现连接错误,将其保存到本地存储,并使用单个 SignalR 连接来了解连接状态(在线/离线),一旦连接恢复在线,您可以将存储在本地存储中的更新发布到服务器

    【讨论】:

    • 为什么不应该使用信号器从服务器获取数据?
    • 因为它不是为此而设计的,并且还有其他方法可以从服务器获取数据,所以 SignalR 主要关心的是得到服务器的通知,使用它从服务器获取数据最终会导致设计问题
    • 如果您使用的是信号器,并且您只需要向服务器发送少量数据,我看不出为什么要并行使用 WebAPI。 SignalR 是为这两种方式设计的。或者你能给我一个链接吗?
    • 你可以这样做,但随着时间的推移,你最终会通过 SignalR 发送所有内容,如果你希望拥有 API,那么 SignalR 将不适合它
    【解决方案3】:

    如果您不喜欢自己构建,也许 PouchDB 可以解决您的问题。你不需要任何 SignalR 或 WebAPI 的东西。

    https://pouchdb.com/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-08
      • 2016-08-31
      • 2011-03-03
      • 1970-01-01
      相关资源
      最近更新 更多