[英]what will happen if vertx setPeriodic delay is little than its handler execution time
[英]Problem that the time interval of vertx.setPeriodic function decreases
它設置為每 5 秒向服務器發送一次 PING。 最初,每 5 秒發送一次 ping。 項目啟動已經過去了一個月。 目前,每秒向服務器發送 2-3 次 ping。 “vertx.setPeriodic” function 好像有BUG。
long[] pID = {0};
pID[0] = vertx.setPeriodic(5000, handler -> {
sendHTTP2PING(mapKey, conn);
});
private void sendHTTP2PING(String mapKey, HttpConnection conn) {
conn.ping(pingData, pong -> {
if(pong.succeeded()) {
localAddressPort = conn.localAddress().port();
logger.info("[HTTP/2 CLIENT PING] RECEIVED PONG");
} else {
logger.info("[HTTP/2 CLIENT PING] DOES NOT RECEIVED PONG...!!!");
disconnectToServer(mapKey);
}
}).closeHandler(ch -> {
disconnectToServer(mapKey);
}).exceptionHandler(exh -> {
disconnectToServer(mapKey);
});
}
日志文件
2020-10-27 16:13:10 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:10 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:11 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:11 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:11 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:12 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:12 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:13 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:15 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:15 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:16 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:16 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:16 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:17 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:17 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:18 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:20 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
2020-10-27 16:13:20 [vert.x-eventloop-thread-2] - [HTTP/2 客戶端 PING] 沒有收到 PONG...!!!
當然,這可能是一個錯誤,您可以打開一個新問題,指定 Vert.x 版本和任何重現它的方法。
不過,我想指出的是,您的代碼不等於“每 5 秒打印一次消息”。 它每 5 秒安排一次調用,是的,但它僅在刪除服務響應或響應失敗時打印出來。
意思是,如果您的遠程服務器以一些隨機延遲響應,您將看到隨機延遲的消息,甚至是亂序的。
我建議嘗試改為使用setTimer
。 這樣,您將確保不會創建出站請求隊列。
pID[0] = vertx.setTimer(5000, handler -> {
sendHTTP2PING(mapKey, conn);
});
private void sendHTTP2PING(String mapKey, HttpConnection conn) {
conn.ping(pingData, pong -> {
if(pong.succeeded()) {
localAddressPort = conn.localAddress().port();
logger.info("[HTTP/2 CLIENT PING] RECEIVED PONG");
} else {
logger.info("[HTTP/2 CLIENT PING] DOES NOT RECEIVED PONG...!!!");
disconnectToServer(mapKey);
}
vertx.setTimer(5000, handler -> {
sendHTTP2PING(mapKey, conn);
});
}).closeHandler(ch -> {
disconnectToServer(mapKey);
}).exceptionHandler(exh -> {
disconnectToServer(mapKey);
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.