Java vertx.SetPeriod函数的时间间隔减小的问题

Java vertx.SetPeriod函数的时间间隔减小的问题,java,vert.x,vert.x-webclient,Java,Vert.x,Vert.x Webclient,设置为每5秒向服务器发送一次PING。 最初,每5秒发送一次ping。 项目启动已经一个月了。 目前,ping每秒被发送到服务器2-3次。 “vertx.setPeriodic”函数中似乎有一个BUG long[] pID = {0}; pID[0] = vertx.setPeriodic(5000, handler -> { sendHTTP2PING(mapKey, conn); }); private void sendHTTP2PING(String map

设置为每5秒向服务器发送一次PING。 最初,每5秒发送一次ping。 项目启动已经一个月了。 目前,ping每秒被发送到服务器2-3次。 “vertx.setPeriodic”函数中似乎有一个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


当然,这可能是一个bug,并且需要指定Vert.x版本和任何复制它的方法

不过,我想指出的是,您的代码并不等于“每5秒打印一次消息”。它每5秒安排一次呼叫,是的,但只有在删除服务响应或响应失败时才会打印出来。
也就是说,如果您的远程服务器响应时出现一些随机延迟,您将看到随机延迟的消息,甚至是无序的消息

我建议改为使用
setTimer
。这样,您将确保不会创建出站请求队列

pID[0]=vertx.setTimer(5000,处理程序->{
sendHTTP2PING(康涅狄格州地图键);
});
私有void sendHTTP2PING(字符串映射键,HttpConnection conn){
连接乒乓球(乒乓球数据、乒乓球->{
if(pong.successed()){
localAddressPort=conn.localAddress().port();
logger.info(“[HTTP/2客户端PING]接收到PONG”);
}否则{
info(“[HTTP/2客户端PING]未收到PONG…!!!”);
断开与服务器的连接(mapKey);
}
setTimer(5000,处理程序->{
sendHTTP2PING(康涅狄格州地图键);
});
}).closeHandler(ch->{
断开与服务器的连接(mapKey);
}).例外处理程序(exh->{
断开与服务器的连接(mapKey);
});
}