何为Netty?
Netty是一个基于NIO的客户端、服务器端的编程框架,用于快速开发可维护、高性能的网络服务器和客户端。Netty具有并发高、传输快、封装好等特点,Netty还可以通便编程自定义各种协议,可通过codec来编码或解码字节流。
入门案例
需求
完成一个简单的服务器端和客户端:
- 客户端向服务器端发送Hello Netty
- 服务器端只接收客户端发来的消息
maven
<dependencies>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.39.Final</version>
</dependency>
</dependencies>
服务端
public class NettySever {
public NettySever(){
// 创建服务端使用SeverBootstrap 进行创建
new ServerBootstrap()
.group(new NioEventLoopGroup()) //创建NioEventLoopGroup事件循环组
.channel(NioServerSocketChannel.class) //将channel定义为NioSocketChannel
.childHandler(new ChannelInitializer<NioSocketChannel>() { //添加处理器
protected void initChannel(NioSocketChannel ch) {
ch.pipeline().addLast(new StringDecoder()); //
ch.pipeline().addLast(new SimpleChannelInboundHandler<String>() {
//业务处理器
@Override
protected void channelRead0(ChannelHandlerContext ctx, String msg) {
System.out.println(msg);
}
});
}
})
.bind(8080);// 鉴定端口8080
}
}
class Main{
public static void main(String[] args) {
new NettySever();
}
}
客户端
public NettyClient(String msg) throws InterruptedException {
// 创建客户端使用 Bootstrap()
new Bootstrap()
.group(new NioEventLoopGroup()) //创建NioEventLoopGroup事件循环组
.channel(NioSocketChannel.class) //将channel定义为NioSocketChannel
.handler(new ChannelInitializer<Channel>() { //消息通过handler处理
@Override
protected void initChannel(Channel ch) {
ch.pipeline().addLast(new StringEncoder());
}
})
.connect("127.0.0.1", 8080) //连接服务器的地址
.sync() //设置为同步
.channel() //获取channel对象
.writeAndFlush(new Date() + ":"+msg); //将消息写入缓冲区
}
public static void main(String[] args) throws Exception{
new NettyClient("Hello Netty");
}
}
实现效果
服务端会获取到来自客户端的消息如图