问题描述
我正在使用带有信号器的 asp.net core 5。
我在 IIS 日志中看到 600 字节 50 次每分钟 13 小时的协商请求(总计:5070000 个请求,~3GB 数据).
为什么会这样?
@Brennan 这样向下到 2 个集线器、jwt、refreshtoken、重新连接
客户代码:
var baseHubAddr = "https://localhost:5001/";
var loginHub,roomHub;
var nick;
var token;
var intervalRefreshToken,intervalSendRanks;
function init() {
var script = document.createElement('script');
script.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(script);
script.onload = () => {
preInit();
};
script.src = baseHubAddr + "lib/microsoft/signalr/dist/browser/signalr.min.js";
}
function preInit() {
loginHub = new signalR.HubConnectionBuilder()
.withUrl(baseHubAddr + "login")
.configureLogging("debug")
.withAutomaticReconnect({
nextRetryDelayInMilliseconds: retryContext => {
reconnectFunc(retryContext);
}
})
.build();
loginHub.onreconnected(connectionId => {
refreshToken();
});
loginHub.on("RefreshToken",function (response) {
console.log(response);
if (response.success) {
token = response;
}
else {
console.error("RefreshToken");
}
});
loginHub.on("Login",function (response) {
console.log(response);
if (response.success) {
intervalRefreshToken = setInterval(refreshToken,24 * 60 * 60 * 1000);
token = response;
roomHub = new signalR.HubConnectionBuilder()
.withUrl(baseHubAddr + "room",{
accesstokenFactory: () => {
return token.jwtToken;
}
})
.configureLogging("debug")
.withAutomaticReconnect({
nextRetryDelayInMilliseconds: retryContext => {
reconnectFunc(retryContext);
}
})
.build();
roomHub.onreconnecting(error => {
console.assert(roomHub.state === signalR.HubConnectionState.Reconnecting);
});
roomHub.onreconnected(connectionId => {
console.assert(roomHub.state === signalR.HubConnectionState.Connected);
roomHub.invoke("ReOpenRoom",roomConfig.roomId).catch(function (err) {
return console.error(err.toString());
});
});
roomHub.onclose(error => {
console.assert(roomHub.state === signalR.HubConnectionState.disconnected);
});
roomHub.start()
.then(function () {
})
.catch(function (err) {
return console.error( err.toString());
});
}
else {
console.log(JSON.stringify(response.errors));
}
});
loginHub.start().then(function () {
nick = prompt("Nick:","");
if (nick) {
let pwd = prompt("Password:","");
if (pwd) {
loginHub.invoke("Login",nick,pwd).catch(function (err) {
return console.error(err.toString());
});
}
else {
alert("Password!");
}
}
else {
alert("Nick!");
}
}).catch(function (err) {
return console.error( err.toString());
});
}
function refreshToken() {
loginHub.invoke("RefreshToken",token.userId,token.refreshToken).catch(function (err) {
return console.error(err.toString());
});
}
function reconnectFunc(retryContext) {
if (retryContext.elapsedMilliseconds < 100) {
return 50;
}
else if (retryContext.elapsedMilliseconds < 1000) {
return 300;
}
else if (retryContext.elapsedMilliseconds < 10000) {
return 1000;
}
else if (retryContext.elapsedMilliseconds < 45000) {
return 5 * 1000;
}
else if (retryContext.elapsedMilliseconds < 2 * 60 * 1000) {
return 10 * 1000;
}
else if (retryContext.elapsedMilliseconds < 5 * 60 * 1000) {
return 60 * 1000;
}
else if (retryContext.elapsedMilliseconds < 10 * 60 * 1000) {
return 3 * 60 * 1000;
}
else if (retryContext.elapsedMilliseconds < 15 * 60 * 1000) {
return 5 * 60 * 1000;
}
else {
return 10 * 60 * 1000;
}
}
init();
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)