【发布时间】:2022-01-23 10:20:14
【问题描述】:
以下代码 ping 我的 NGINX 服务器上的 NGINX 位置块,为您提供健康检查状态。
const ping = async () => {
const url = `http://10.10.1.100/status`;
const postData = {
method: 'POST', // *GET, POST, PATCH, DELETE, etc.
mode: 'cors', // no-cors, *cors, same-origin
cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
headers: {
'Content-Type': 'text/plain; charset=ASCII'
},
body: 'PING'
}
try {
let factor = 1;
let timeout = 3000; // ms
let start = (new Date()).getTime();
const request = await fetch(url, postData);
let delta = new Date().getTime() - start;
delta *= (factor || 1);
if(delta > timeout) throw new Error(`PONG > ${timeout}ms. Server down?`);
if(!request.ok) throw new Error(`${request.status} ${request.statusText}`);
const response = await request.text();
if(!response) throw new Error(`${response}`);
document.getElementById('serverPongSpeed').innerText = `${delta.toFixed(0)}ms`;
// Do Something...
console.log(`%c${delta.toFixed(0)}ms ${response}`, "color: #c6ff00"); // Lime A400
} catch (error) {
console.log(error);
}
}
NGINX 位置块:
location = /status {
access_log off;
default_type text/plain;
add_header "Access-Control-Allow-Methods" "POST";
add_header "Content-Type" "text/plain";
return 200 "PONG";
}
现在我是这样运行的:
setInterval(ping, 3000); // Every 3 seconds
问题是,在测试期间,当我关闭 NGINX 以查看 PING 不会中断时会发生什么。它只是不断发送 POST 请求。
也许这是我没有发现的错误?或者可能没有错误,因为 fetch 有更大的超时?也许将获取超时设置为 3 秒会触发一些东西让我抓到..
【问题讨论】:
-
也许有些东西会缓存您的请求。在您的 Url 请求中添加一些随机字符串结尾。 const url =
http://10.10.1.100/status?v=+(new Date().valueOf()); -
当你说它“不会中断”时,你的意思是它永远不会捕获
catch块中的错误吗? -
正确。我想在获取失败时至少显示
0ms,因为我故意关闭了 NGINX。但似乎“获取”只是排队,直到我打开 NGINX。在这种情况下,他们从未成功完成。 -
关机后试试
clear interval。
标签: javascript nginx setinterval