十六、Netty入门服务端代码

18 篇文章 1 订阅

导论

前面几篇文章我们分别从

一、C10K问题经典问答
二、java.nio.ByteBuffer用法小结
三、Channel 通道
四、Selector选择器
五、Centos-Linux安装nc
六、windows环境下netcat的安装及使用
七、IDEA的maven项目的netty包的导入(其他jar同)
八、JAVA IO/NIO
九、网络IO原理-创建ServerSocket的过程
十、网络IO原理-彻底弄懂IO
十一、JAVA中ServerSocket调用Linux系统内核
十二、IO进化过程之BIO
十三、Java-IO进化过程之NIO
十四、使用Selector(多路复用器)实现Netty中Reactor单线程模型
十五、使用Selector(多路复用器)实现Netty中Reactor主从模型
等几个纬度对JavaIO和NIO体系做了详细介绍,并由简到深的根据IO体系的升级过程做了系统分析。
前文中的第十四、使用Selector(多路复用器)实现Netty中Reactor单线程模型十五、使用Selector(多路复用器)实现Netty中Reactor主从模型文章我们已经使用Selector自己实现了Netty框架中的单线程模型、主从模型。如果能深入理解以上两篇文章,那么后续对于Netty的学习和理解Netty的Reactor会非常简单。今天我们先通过入门的角度从Idea中导入Netty包,并且使用Netty构建一个可用于接受数据的服务端。

IDEA的maven项目的netty包的导入(其他jar同)

具体请看文章七、IDEA的maven项目的netty包的导入(其他jar同)

netty入门服务端代码

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;


/**
 * Created by Bruce on 2020/9/18
 * 使用 NettyIO实现多路复用器
 **/
public class NettyIO {

    public static void main(String[] args) throws InterruptedException {

        /**
         * //单线程模型---netty单线程模型---即接受客户端请求连接也负责处理客户端的数据
         * netty单线程模型---写法
         * NioEventLoopGroup boss = new NioEventLoopGroup(1);
         *         ServerBootstrap serverBootstrap = new ServerBootstrap();
         *         serverBootstrap.group(boss,boss)
         *                 .channel(NioServerSocketChannel.class)
         *                 .childHandler(new MyImbound());
         *
         *
         * //混合模型---netty混合模型---组内有一个boss即接受客户端请求连接也负责处理客户端的数据,其他线程只负责处理客户端的数据
         * netty混合模型---写法
         * NioEventLoopGroup boss = new NioEventLoopGroup(4);
         *         ServerBootstrap serverBootstrap = new ServerBootstrap();
         *         serverBootstrap.group(boss,boss)
         *                 .channel(NioServerSocketChannel.class)
         *                 .childHandler(new MyImbound());
         *
         * //主备模型---netty主备模型---boss 只负责接口客户端的连接请求 worker负责
         *
         * -----如果这里把 boss的参数改成  2,那么猜一下系统中会有几个线程?
         * 用JDK自带的jvisualvm看一下。
         *
         * NioEventLoopGroup boss = new NioEventLoopGroup(1);
         *         NioEventLoopGroup worker = new NioEventLoopGroup(3);
         *         ServerBootstrap serverBootstrap = new ServerBootstrap();
         *         serverBootstrap.group(boss,worker)
         *                 .channel(NioServerSocketChannel.class)
         *                 .childHandler(new MyImbound());
         *
         */
        NioEventLoopGroup boss = new NioEventLoopGroup(1);
        NioEventLoopGroup worker = new NioEventLoopGroup(3);
        ServerBootstrap serverBootstrap = new ServerBootstrap();
        serverBootstrap.group(boss,worker)
                .channel(NioServerSocketChannel.class)
                .childHandler(new ChannelInitializer<NioSocketChannel>() {
                    @Override
                    protected void initChannel(NioSocketChannel nioSocketChannel) throws Exception {
                        ChannelPipeline p = nioSocketChannel.pipeline();
                        p.addLast(new MyImbound());
                    }
                });

        ChannelFuture future = serverBootstrap.bind(8080).sync();
        future.channel().closeFuture().sync();
    }

}

class MyImbound extends ChannelHandlerAdapter{

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
//        super.channelRead(ctx, msg);
        ctx.write(msg);
    }

    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
//        super.channelReadComplete(ctx);
        ctx.flush();
    }
}

数据打印

在linux环境或者windows环境下使用nc命令链接服务端,查看服务端打印过程。
具体linux系统或者windows系统如何安装nc命令,请从网络搜索或查看目录文档 ‘网络IO涉及到的-linux指令.docx’。
五、Centos-Linux安装nc
六、windows环境下netcat的安装及使用

1.nc客户端1打印(Windows-nc命令打印)

C:\Users\Administrator>nc 127.0.0.1 8080
111111
111111

2.nc客户端1打印(Windows-nc命令打印)

C:\Users\Administrator>nc 127.0.0.1 8080
222
222

往期JavaIO文章

一、C10K问题经典问答
二、java.nio.ByteBuffer用法小结
三、Channel 通道
四、Selector选择器
五、Centos-Linux安装nc
六、windows环境下netcat的安装及使用
七、IDEA的maven项目的netty包的导入(其他jar同)
八、JAVA IO/NIO
九、网络IO原理-创建ServerSocket的过程
十、网络IO原理-彻底弄懂IO
十一、JAVA中ServerSocket调用Linux系统内核
十二、IO进化过程之BIO
十三、Java-IO进化过程之NIO
十四、使用Selector(多路复用器)实现Netty中Reactor单线程模型
十五、使用Selector(多路复用器)实现Netty中Reactor主从模型
如需了解更多更详细内容也可关注本人CSDN博客:不吃_花椒

如果需要后续其他系列文章请后关注私聊或者关注后续其他系列文章。
在这里插入图片描述

整体JavaIO体系文章概览

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值