验证Netty客户端线程
发布日期:2021-05-18 06:39:16 浏览次数:15 分类:精选文章

本文共 1630 字,大约阅读时间需要 5 分钟。

我们验证了Netty服务端线程,现在我们来验证客户端线程。这需要与之前服务端的代码配合测试。

以下是客户端的代码示例:

EventLoopGroup group = new NioEventLoopGroup();
Bootstrap bootstrap = new Bootstrap();
bootstrap.group(group)
.channel(NioSocketChannel.class)
.option(ChannelOption.SO_KEEPALIVE, true)
.option(ChannelOption.TCP_NODELAY, true)
.handler(new ChannelInitializer
() {
@Override
protected void initChannel(NioSocketChannel ch) {
ChannelPipeline channelPipeline = ch.pipeline();
channelPipeline.addLast(new StringDecoder());
channelPipeline.addLast(new StringEncoder());
channelPipeline.addLast(new ClientInHandler());
}
});
bootstrap.connect(new InetSocketAddress("127.0.0.1", 8080));

以下是客户端输入Handler的代码:

@Slf4j
public class ClientInHandler extends SimpleChannelInboundHandler
{
@Override
protected void channelRead0(ChannelHandlerContext ctx, String msg) {
log.info("ClientInHandler-channelRead0: {}" + Thread.currentThread().getName());
System.out.println("客户端接收到服务端数据: " + msg);
}
}

为了接收服务端的数据,我们在ChannelHandlerContext的channelRead方法中添加打印代码:

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
System.out.println("HeadContext-channelRead: " + Thread.currentThread().getName());
ctx.fireChannelRead(msg);
}

通过以上代码,我们可以看到两个Handler使用不同的线程。此外,默认情况下Netty使用统一的线程池来执行这些Handler。如果需要特定线程执行Handler,可以在初始化时指定。

在第一次测试中,两个Handler使用了同一个线程。稍微修改后,服务启动后输出显示两个Handler使用了不同的线程。这种方式确保了代码的扩展性和灵活性。

总之,当用户手动指定Handler执行的线程时,Handler会在指定的线程中运行,否则默认使用Netty提供的线程池。

上一篇:联调过程遇到的rocketmq问题
下一篇:验证Netty服务端线程

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月27日 23时00分27秒