外行人也能看懂的Netty开发教程(1)-第一次接触
2023-04-18 12:44:57 时间
package io.netty.example.discard;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
/**
* 处理服务端的channel.
*
* DiscardServerHandler继承ChannelInboundHandlerAdapter(ChannelInboundHandler的实现)
* ChannelInboundHandler提供了可重写的各种事件处理器方法
* 现在,仅扩展ChannelInboundHandlerAdapter即可,而不是自己实现处理器接口
*/
public class DiscardServerHandler extends ChannelInboundHandlerAdapter {
/**
* 当有事件发生时,会调用
* 这里重写channelRead事件处理器方法。每当从客户端接收到新数据时,就使用接收到的消息来调用此方法
* 此示例中,接收到的消息的类型为ByteBuf
*/
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
/**
* ByteBuf是个引用计数对象,必须通过release显式释放。
* 释放传递给处理程序的引用计数对象都是处理程序的责任!!!
*
* 一般channelRead处理器方法的实现如下:
* @Override
* public void channelRead(ChannelHandlerContext ctx, Object msg) {
* try {
* // 处理 msg
* } finally {
* ReferenceCountUtil.release(msg);
* }
* }
*/
ByteBuf byteBuf = (ByteBuf) msg;
try {
int count = byteBuf.readableBytes();
byte[] content = new byte[count];
byteBuf.readBytes(content);
System.out.println(new String(content));
} finally {
byteBuf.release();
}
}
/**
* 当Netty由于I/O错误、处理器的实现类处理事件时抛异常
* 将使用Throwable调用exceptionCaught事件处理器方法
* 在大多数情况下,应该记录捕获的异常并在此处关闭其关联的通道,尽管此方法的实现可能会有所不同,具体取决于您要处理特殊情况时要采取的措施
* 例如,您可能想在关闭连接之前发送带有错误代码的响应消息。
*/
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
// 引发异常时关闭连接
cause.printStackTrace();
ctx.close();
}
}
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击