netty、springboot中的适配器模式

一般用netty来发送和接收数据都会继承SimpleChannelInboundHandler和ChannelInboundHandlerAdapter这两个抽象类,那么这两个到底有什么区别呢?

其实用这两个抽象类是有讲究的,在客户端的业务Handler继承的是SimpleChannelInboundHandler,而在服务器端继承的是ChannelInboundHandlerAdapter。

最主要的区别就是SimpleChannelInboundHandler在接收到数据后会自动release掉数据占用的Bytebuffer资源(自动调用Bytebuffer.release())。而为何服务器端不能用呢,因为我们想让服务器把客户端请求的数据发送回去,而服务器端有可能在channelRead方法返回前还没有写完数据,因此不能让它自动release。

Java中的设计模式 - 适配器模式(接口适配器)
应用场景:不想实现接口中的所有方法
#
1 - 创建接口
public interface Port {

    // 远程SSH端口22
    public void SSH();

    // 网络端口80
    public void NET();
}

2 - 伪实现接口
/**
 * 定义抽象类实现端口接口,但是什么事情都不做
 */
public abstract class Wrapper implements Port{

    @Override
    public void SSH(){};

    @Override
    public void NET(){}
}

3 - 覆写伪接口实现一种功能
/**
 * 提供聊天服务
 * 需要网络和文件传输功能
 */
public class Chat extends Wrapper{

    @Override
    public void NET(){ System.out.println("Hello world!"); };

    @Override
    public void FTP(){ System.out.println("File upload succeddful!"); };

}
4 - 覆写伪接口实现另外一种功能
/**
 * 网站服务器
 * 需要Tomcat容器,Mysql数据库,网络服务,远程服务
 */
public class Server extends Wrapper{

    @Override
    public void SSH(){ System.out.println("Connect success!"); };


}
5 - 运行服务
/**
 * 运行器
 * 运行聊天服务和服务器
 */
public class Start {
    private static Port chatPort = new Chat();
    public static void main(String[] args) {
    // 聊天服务
    chatPort.FTP();
    chatPort.NET();
    }
}

5 - 运行结果
File upload succeddful!
Hello world!
Mysql is running!
Connect success!
Tomcat 9 is running!
Hello WWW!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhousenshan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值