2

Netty サーバーのシャットダウンについて少し問題があります。ドキュメントには、サーバーのシャットダウンについて次のように書かれています。

public class TimeServer {

static final ChannelGroup allChannels = new DefaultChannelGroup("time-server");

public static void main(String[] args) throws Exception {
    ...
    ChannelFactory factory = ...;
    ServerBootstrap bootstrap = ...;
    ...
    Channel channel = bootstrap.bind(...);
    allChannels.add(channel);
    waitForShutdownCommand();
    ChannelGroupFuture future = allChannels.close();
    future.awaitUninterruptibly();
    factory.releaseExternalResources();
}

}

次に、「waitForShutDownCommand」とは何かを調べたところ、ShutdownHook メソッドのようなものであることがわかりました。それでは、shutdownhook メソッドをサーバーに追加しました。

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
        @Override
        public void run() {
            nettyServer.shutDown();
        }
    }, "shutDownHook"));

しかし、ctrl-c でサーバーを終了しようとすると、常に呼び出されるとは限らないことに気付きました。サーバーのシャットダウン時に、そのサーバーに関連する操作を実行したいためです。(そのサーバーに関連するすべてのデータを Redis から削除するようなものです。)

だから..私はアイデアを思いつきましたが、まだ実装していません。それが良いアプローチであるかどうかを確認したいだけです。したがって、サーバーをシャットダウンするには、そのサーバーに SHUTDOWN コマンドを送信する CLIENT (管理クライアント) が必要です。実際には、別のクライアント アプリケーションやセキュリティなどを気にしたくないため、ADMIN クライアントを作成したくありませんでした。 ...

それで、あなたの解決策は何ですか?何か案は?ありがとう...

4

1 に答える 1

1

CTRL + C は、運が良ければ、シャットダウン フックを実行しません。「kill」を使用すると機能します。

于 2012-09-05T11:50:33.210 に答える