0

5秒ごとにサーバーにPINGを送信するように設定されています。最初は、ping は 5 秒ごとに送信されていました。プログラム開始から1ヶ月が経過しました。現在、ping は 1 秒あたり 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 を受信しません...!!!

4

1 に答える 1

0

もちろん、これはバグである可能性があり、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);
    });
}
于 2020-10-27T09:38:18.900 に答える