服务器重启时自动重新连接 SignalR 客户端
Auto reconnect SignalR client when server restart
我在 ASP.NET 样板项目中使用 ASP.NET Core SignalR,服务器启动时一切正常。
但是由于某种原因我需要重新启动服务器,我看到了这些错误:
而且我必须刷新我的网页才能重新连接到 SignalR。
有什么方法可以不刷新就检查服务器重连吗?
我使用 Angular 模板和 ABP v4.0.1 附带的默认 SignalR 客户端。
这已在模板的 v5.1.1 中修复:aspnetboilerplate/module-zero-core-template#498
重新连接循环
yarn upgrade abp-web-resources@^4.1.0
重新连接循环在 abp-web-resources@4.1.0 中可用:
// Reconnect loop
function start() {
connection.start().catch(function () {
setTimeout(function () {
start();
}, 5000);
});
}
// Reconnect if hub disconnects
connection.onclose(function (e) {
if (e) {
abp.log.debug('Connection closed with error: ' + e);
} else {
abp.log.debug('Disconnected');
}
// if (!abp.signalr.autoConnect) {
if (!abp.signalr.autoReconnect) {
return;
}
// setTimeout(function () {
// connection.start();
// }, 5000);
start();
});
参考文献:
- aspnetboilerplate/bower-abp-resources@8cf7928 (abp-web-resources@4.1.0)
- aspnetboilerplate/aspnetboilerplate#4490 (ABP v4.7.0)
重新连接回路 + 断路器
yarn upgrade abp-web-resources@^5.1.1
断路器在 abp-web-resources@5.1.1 中可用:
// Reconnect loop
function tryReconnect() {
if (tries > abp.signalr.maxTries) {
return;
} else {
connection.start()
.then(() => {
reconnectTime = abp.signalr.reconnectTime;
tries = 1;
console.log('Reconnected to SignalR server!');
}).catch(() => {
tries += 1;
reconnectTime *= 2;
setTimeout(() => tryReconnect(), reconnectTime);
});
}
}
// Reconnect if hub disconnects
connection.onclose(function (e) {
if (e) {
abp.log.debug('Connection closed with error: ' + e);
} else {
abp.log.debug('Disconnected');
}
if (!abp.signalr.autoReconnect) {
return;
}
// start();
tryReconnect();
});
参考文献:
- aspnetboilerplate/bower-abp-resources#22 (abp-web-resources@5.1.1)
- aspnetboilerplate/aspnetboilerplate#4975 (ABP v5.1.0)
我在 ASP.NET 样板项目中使用 ASP.NET Core SignalR,服务器启动时一切正常。
但是由于某种原因我需要重新启动服务器,我看到了这些错误:
而且我必须刷新我的网页才能重新连接到 SignalR。
有什么方法可以不刷新就检查服务器重连吗?
我使用 Angular 模板和 ABP v4.0.1 附带的默认 SignalR 客户端。
这已在模板的 v5.1.1 中修复:aspnetboilerplate/module-zero-core-template#498
重新连接循环
yarn upgrade abp-web-resources@^4.1.0
重新连接循环在 abp-web-resources@4.1.0 中可用:
// Reconnect loop
function start() {
connection.start().catch(function () {
setTimeout(function () {
start();
}, 5000);
});
}
// Reconnect if hub disconnects
connection.onclose(function (e) {
if (e) {
abp.log.debug('Connection closed with error: ' + e);
} else {
abp.log.debug('Disconnected');
}
// if (!abp.signalr.autoConnect) {
if (!abp.signalr.autoReconnect) {
return;
}
// setTimeout(function () {
// connection.start();
// }, 5000);
start();
});
参考文献:
- aspnetboilerplate/bower-abp-resources@8cf7928 (abp-web-resources@4.1.0)
- aspnetboilerplate/aspnetboilerplate#4490 (ABP v4.7.0)
重新连接回路 + 断路器
yarn upgrade abp-web-resources@^5.1.1
断路器在 abp-web-resources@5.1.1 中可用:
// Reconnect loop
function tryReconnect() {
if (tries > abp.signalr.maxTries) {
return;
} else {
connection.start()
.then(() => {
reconnectTime = abp.signalr.reconnectTime;
tries = 1;
console.log('Reconnected to SignalR server!');
}).catch(() => {
tries += 1;
reconnectTime *= 2;
setTimeout(() => tryReconnect(), reconnectTime);
});
}
}
// Reconnect if hub disconnects
connection.onclose(function (e) {
if (e) {
abp.log.debug('Connection closed with error: ' + e);
} else {
abp.log.debug('Disconnected');
}
if (!abp.signalr.autoReconnect) {
return;
}
// start();
tryReconnect();
});
参考文献:
- aspnetboilerplate/bower-abp-resources#22 (abp-web-resources@5.1.1)
- aspnetboilerplate/aspnetboilerplate#4975 (ABP v5.1.0)