-
NioEventLoopGroup 类似线程池
-
ServerBootstrap netty服务端的组件容器 用于把其他部分连接起来,使用的是建造者模式
-
NioServerSocketChannel nio服务端通道
-
InetSocketAddress jdk中绑定端口的inet类
-
ChannelInitializer 继承ChannelInboundHandlerAdapter
-
SocketChannel
-
ChannelPipeline
-
ChannelInboundHandlerAdapter channel入站适配器
-
ChannelOutboundHandlerAdapter channel出站适配器
-
Bootstrap netty客户端的组件容器 用于把其他部分连接起来,使用的是建造者模式
-
IdleStateHandler(0,0,5)
int readerIdleTimeSeconds, 读通道空闲时间
int writerIdleTimeSeconds, 写通道空闲时间
int allIdleTimeSeconds 全部通道空闲时间
使用时重写ChannelInboundHandlerAdapter中的 userEventTriggered方法
/***
* 心跳检测
* 实现自定义userEventTrigger()方法,如果出现超时时间就会被触发,包括读空闲超时或者写空闲超时
* READER_IDLE reader_idle 读通道处于空闲状态
* WRITER_IDLE writer_idle 写通道处于空闲状态
* ALL_IDLE all_idle 全部通道
*
* @param ctx
* @param evt
* @throws Exception
*/
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
IdleStateEvent stateEvent = (IdleStateEvent) evt;
switch (stateEvent.state()) {
case READER_IDLE:
handlerReaderIdle(ctx);
break;
case WRITER_IDLE:
handlerWriterIdle(ctx);
break;
case ALL_IDLE:
handlerAllIdle(ctx);
break;
default:
break;
}
}
服务端方法
- .group(bossGroup, workGroup) 绑定 bossGroup workGroup
- .channel(NioServerSocketChannel.class) 设置处理handler
- .localAddress(new InetSocketAddress(port)) 设置开启端口号
- .childAttr() 设置attr
- .childOption() 设置option
- .childOptions() 批量设置option
- .childHandler 设置子handler
- .childHandler
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) {
ChannelPipeline pipeline = ch.pipeline();
// 服务端每10秒 检测一次读空闲
ch.pipeline().addLast(new IdleStateHandler(10,0,0));
ChannelUtil.buildChannelPipeline(pipeline);
// 添加具体handler
ch.pipeline().addLast(new ServerhandlerInIdle());
//ch.pipeline().addLast(new ServerHandlerInB());
//ch.pipeline().addLast(new ServerHandlerOutB());
//ch.pipeline().addLast(new ServerHandlerInC());
//ch.pipeline().addLast(new ServerHandlerOutC());
}
});
- .addListener() 绑定监听
客户端方法
- .channel(NioSocketChannel.class) 设置io 类型
- .handler(new ChannelInitializer<SocketChannel>)设置handler
- .connect(host, port) 绑定连接端口和host信息
部分结构图
-
channel handler 结构图
image.png
网友评论