【发布时间】:2019-09-09 06:06:10
【问题描述】:
在 ASP.NET Core 2.1 LTS 上,有 no automatically reconnect for SignalR。所以我使用onclose event of the js client 自己实现了它。虽然这可行,但它有一个副作用:当客户端本身取消连接时,客户端也会尝试重新连接 - 例如在关闭浏览器选项卡时。
重新连接会在短时间内起作用,直到选项卡关闭。由于在这种情况下我会在重新连接时重新加载通知以使用户保持最新状态,因此这是对资源的浪费,因为我对关闭选项卡的用户执行了多个 SQL 查询。
let reconnectWaitTime = 5000
let client = new signalR.HubConnectionBuilder()
.withUrl("/overviewHub")
.build();
client.onclose(async (e) => {
await tryReconnect(client)
notificationsManager.handleReConnect()
})
await tryReconnect(client)
let notificationsManager = new ULNotificationsManager(client)
async function tryReconnect(client,) {
try {
let started = await client.start()
return started;
} catch (e) {
await new Promise(resolve => setTimeout(resolve, reconnectWaitTime));
return await tryReconnect(client)
}
}
如何检测连接是从客户端关闭还是从服务器关闭,以便只有在服务器关闭连接时才能重新加载通知数据?
方法
According to the documentation,onclose 方法应该有一个Error 回调:
client.onclose(function(ev){
console.warn(ev)
})
我的想法是使用此错误来获取更详细的信息,例如一些错误代码,让我过滤掉客户端中止。但这似乎不起作用,我的日志中有undefined。
【问题讨论】:
标签: c# asp.net-core signalr asp.net-core-2.1 asp.net-core-signalr