问题描述
设置为每5秒向服务器发送一次PING。 最初,每5秒发送一次ping。 自程序启动以来已过去一个月。 当前,ping每秒被发送2-3次到服务器。 “ vertx.setPeriodic”函数中似乎存在一个错误。
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 ... !!!
解决方法
当然,这可能是一个错误,you could open a new issue指定了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);
});
}