Pat*_*ick 6 javascript c# asp.net-mvc signalr asp.net-web-api
我正在尝试使用 signalR 构建应用程序。申请大纲将是:
我正在寻找一组最佳实践。如果我在初始加载后订阅更新,则存在丢失更新的风险。在初始加载和订阅之间可能有更新和我会错过的更新。
其次,我可以使用某种对象状态 ID,然后首先订阅更新流,检索数据,然后在对象落后时应用更新。这将需要相当多的代码。
是否有任何最佳做法来处理这个问题?
根据您查询更新的时间,可能会出现遗漏。例如,假设您的后端查询某些通知并将其推送到客户端,然后用户连接(订阅)通知 - 如果在此初始化阶段发送更新并错过,您推送的原始数据集可能会过时。
我发现,最佳实践是放弃发送任何初始数据。相反,请尽快订阅并在成功连接后查询更新。例如....
var proxy = $.connection.yourHub;
$.connection.hub.start()
.done(function () { // <--- immediately call once connected
// define and call server hub method
// this will query updates and immediately
// invoke the associated client function
proxy.server.queryUpdates();
})
.fail(function () {
console.log('Could not connect!');
});
proxy.client.serveUpdates = function(updates) {
// here's your fetched updates on initial connect
}
Run Code Online (Sandbox Code Playgroud)
// YourHub.cs
public void QueryUpdates()
{
var updates = this.yourService.yourQueryUpdatesmethod();
Clients.Caller.serveUpdates(updates) // this calls proxy.client.serveUpdates
}
Run Code Online (Sandbox Code Playgroud)
这为您带来了建立连接、侦听更新以及在连接时以一次性方式有效提供最新数据集的好处。
请注意,这不必是 SignalR 特定的实现。您可以在此回调中进行典型的 ajax 调用.done()来检索结果,但我不明白为什么您不能重新使用集线器上已有的所有逻辑。本质上,您可以通过从客户端显式调用它来调用现有的集线器方法。
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |