§1 心跳检测器
IdleStateHandler
- 自动对空闲时长进行判断
- 触发空闲超长后,抛出
IdleStateEvent
事件 IdleStateEvent
事件自动 交由此 handler 后的下一个 handler 进行处理
参数
- readerIdleTime:读空闲时长
- writerIdleTime:写空闲时长
- allIdleTime:读写空闲时长
- unit:单位
示例
ch.pipeline().addLast(new IdleStateHandler(1,2,3,TimeUnit.SECONDS));
§2 事件处理
SimpleUserEventChannelHandler<Event>
事件实际上是依赖 ChannelInboundHandler
中如下接口处理
/**
* Gets called if an user event was triggered.
*/
void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception;
但此接口的事件是个 Object
,而 Netty 一定对各种事件有封装,且应当遵循单一职责一个事件处理器只处理一种事件
因此推荐 SimpleUserEventChannelHandler<Event>
示例
以空闲事件 IdleStateEvent
的处理为例
ch.pipeline().addLast(new NettyChatHeartStopEventHandler());
public class NettyChatHeartStopEventHandler extends SimpleUserEventChannelHandler<IdleStateEvent> {
// 演示代码,只打印
@Override
protected void eventReceived(ChannelHandlerContext ctx, IdleStateEvent evt) throws Exception {
switch (evt.state()){
case READER_IDLE: break;
case WRITER_IDLE: break;
case ALL_IDLE:break;
}
System.out.println(evt.state());
}
}
§3 日志
LoggingHandler
参数
- level:日志级别
示例
ch.pipeline().addLast(new LoggingHandler(LogLev.INFO));
§4 编解码器
Http 服务端编解码器
HttpServerCodec
示例
ch.pipeline().addLast("coder4HttpRequest",new HttpServerCodec());
String 编解码器
StringEncoder
StringDecoder
示例
ch.pipeline().addLast("coder4HttpRequest",new HttpServerCodec());
ch.pipeline().addLast("coder4HttpRequest",new HttpServerCodec());
ProtoBuf 编解码器
ProtoBufEncoder
ProtoBufDecoder
示例
ch.pipeline().addLast(new ProtoBufEncoder());
ch.pipeline().addLast(new ProtoBufDecoder());
§5 WebSocket
WebSocketServerProtocolHandler
- 用于将 http 协议升级为 ws 协议
通过状态码 101 - 升级后通过自定义 WebSocket 帧 handler 处理