• netty 底层的工作原理


    什么是 Netty

    Netty 是一个高性能的网络通信框架,封装了底层复杂的 socket 编程细节,让我们可以高效快速构建自己的应用

    有哪些开源框架用了 Netty 呢?grpc、dubbo、kafka、rocketmq、zookeeper、hadoop

    Netty Demo

    server 端启动 netty 服务器

    public static void main(String[] args) throws InterruptedException {
        EventLoopGroup boss = new NioEventLoopGroup();
        EventLoopGroup worker = new NioEventLoopGroup();
        try {
            ServerBootstrap serverBootstrap = new ServerBootstrap();
            serverBootstrap.group(boss, worker)
                    .channel(NioServerSocketChannel.class)
                    // 设置接收缓冲区大小
              			// 控制窗口值
                    .childOption(ChannelOption.SO_RCVBUF, 32 * 1024)
                    // 设置发送缓冲区大小
                    .childOption(ChannelOption.SO_SNDBUF, 32 * 1023)
                    .childHandler(new ChannelInitializer() {
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            ChannelPipeline channelPipeline = ch.pipeline();
                            channelPipeline.addLast(new JdrpcCodec());
                            channelPipeline.addLast(new JdrpcServerHandler());
                        }
                    });
            ChannelFuture channelFuture = serverBootstrap.bind(JdrpcConstant.PORT).sync();
    
            channelFuture.addListener(future -> {
               if (future.isSuccess()) {
                   logger.info("服务启动成功,绑定端口: {}", JdrpcConstant.PORT);
               } else {
                   logger.error("服务启动失败");
               }
            });
            channelFuture.channel().closeFuture().sync();
    
        } finally {
            boss.shutdownGracefully();
            worker.shutdownGracefully();
        }
    }
    
    

    启动 client

    public static void main(String[] args) throws InterruptedException {
        EventLoopGroup eventLoopGroup = new NioEventLoopGroup();
        Bootstrap bootstrap = new Bootstrap();
        bootstrap.group(eventLoopGroup)
                .channel(NioSocketChannel.class)
          			// 连接超时时间
                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)
                // 保持长连接心跳
                .option(ChannelOption.SO_KEEPALIVE, true)
                // 禁用 Nagle 算法
                .option(ChannelOption.TCP_NODELAY, true)
                .handler(new ChannelInitializer() {
                    @Override
                    protected void initChannel(SocketChannel ch) throws Exception {
                        ch.pipeline()
                          			// 设置编码解码器
                                .addLast(new JdrpcCodec())
                                // 业务逻辑处理类
                                .addLast(new JdrpcClientHandler());
                    }
                });
        bootstrap.connect("127.0.0.1", JdrpcConstant.PORT).addListener(future -> {
            if (future.isSuccess()) {
                logger.info("
  • 相关阅读:
    C++基础知识(上)
    【新版】系统架构设计师 - 软件架构设计<新版>
    nginx反向代理与负载均衡
    git删除本地分支
    100ms的SQL把服务器搞崩溃了
    勤奋型人格分析,勤奋型人格如何做职业规划
    Android打造专有hook第二篇,走进规范第一步
    读者自荐的 4 个 GitHub 项目
    基于SSM的校园二手交易网站设计与实现
    JS中的【函数】与【方法】之“父慈子孝”
  • 原文地址:https://blog.csdn.net/Candyz7/article/details/126478360