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 クライアントを作成したくありませんでした。 ...
それで、あなたの解決策は何ですか?何か案は?ありがとう...