feat(新增): 🚀 关闭客户端
This commit is contained in:
parent
15ace8f636
commit
88fd718975
|
@ -0,0 +1,70 @@
|
||||||
|
package cn.bunny.service.netty.demo3;
|
||||||
|
|
||||||
|
import io.netty.bootstrap.Bootstrap;
|
||||||
|
import io.netty.channel.Channel;
|
||||||
|
import io.netty.channel.ChannelFuture;
|
||||||
|
import io.netty.channel.ChannelFutureListener;
|
||||||
|
import io.netty.channel.ChannelInitializer;
|
||||||
|
import io.netty.channel.nio.NioEventLoopGroup;
|
||||||
|
import io.netty.channel.socket.nio.NioSocketChannel;
|
||||||
|
import io.netty.handler.codec.string.StringEncoder;
|
||||||
|
import io.netty.handler.logging.LogLevel;
|
||||||
|
import io.netty.handler.logging.LoggingHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
public class CloseFutureClient {
|
||||||
|
public static void main(String[] args) throws InterruptedException {
|
||||||
|
NioEventLoopGroup group = new NioEventLoopGroup();
|
||||||
|
ChannelFuture channelFuture = new Bootstrap()
|
||||||
|
.group(group)
|
||||||
|
.channel(NioSocketChannel.class)
|
||||||
|
.handler(new ChannelInitializer<NioSocketChannel>() {
|
||||||
|
@Override
|
||||||
|
protected void initChannel(NioSocketChannel nioSocketChannel) throws Exception {
|
||||||
|
nioSocketChannel.pipeline().addLast(new LoggingHandler(LogLevel.DEBUG));
|
||||||
|
nioSocketChannel.pipeline().addLast(new StringEncoder());
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.connect(new InetSocketAddress("localhost", 8080));
|
||||||
|
|
||||||
|
Channel channel = channelFuture.sync().channel();
|
||||||
|
new Thread(() -> {
|
||||||
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
while (true) {
|
||||||
|
String line = scanner.nextLine();
|
||||||
|
if ("q".equals(line)) {
|
||||||
|
channel.close();// 1秒之后关闭(异步)不一定是这个先关闭
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
channel.writeAndFlush(line);
|
||||||
|
}
|
||||||
|
}, "input").start();
|
||||||
|
|
||||||
|
// 获取CloseFuture 1、同步处理关闭 2、一步处理关闭
|
||||||
|
ChannelFuture closeFuture = channel.closeFuture();
|
||||||
|
// 同步关闭
|
||||||
|
/**
|
||||||
|
* * 同步方式关闭,目前关闭控制台并没有关闭
|
||||||
|
* log.debug("等待关闭。。。");
|
||||||
|
* closeFuture.sync();
|
||||||
|
* log.debug("处理完成关闭");
|
||||||
|
* group.shutdownGracefully();
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 异步方式关闭
|
||||||
|
*/
|
||||||
|
closeFuture.addListener(new ChannelFutureListener() {
|
||||||
|
@Override
|
||||||
|
public void operationComplete(ChannelFuture channelFuture) throws Exception {
|
||||||
|
// 不是立刻停止,等待消息发送完成后在关闭
|
||||||
|
group.shutdownGracefully();
|
||||||
|
log.debug("处理完成关闭");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue