Netty是什么?怎么学?

简介: Netty是什么?怎么学?

Netty,英文全称为Netty Project,是一个开源的异步事件驱动的网络应用框架,用于快速开发高性能、高可靠性的网络服务器和客户端程序。Netty是由JBoss提供的一个NIO客户端/服务器框架,用于快速开发可维护的高性能协议服务器和客户端。

官网:https://netty.io/

Netty是什么:

Netty是一种Java NIO(New input/output)框架,也就是可以为一个高性能、高效、高可扩展性的网络应用程序提供基础架构。 Netty的架构特别灵活,包含了许多好用的解码器、编码器等组件,可以帮助我们快速进行网络编程的开发工作。

Netty学习路线:

1.了解Java NIO。

2.学习Netty框架的基本结构和原理。

3.学习Netty中的各种组件和设计模式。

4.掌握基本的Netty应用场景。

5.深入掌握Netty的性能优化。

6.学习Netty的高级应用,如RPC、Websocket等。

Netty的优点:

1.高性能:Netty基于NIO,利用了事件驱动模型和多路复用机制,实现了非常高效的I/O操作。

2.可扩展:Netty提供了很多的组件、接口以及设计模式,使得用户可以方便地扩展Netty的功能。

3.易于使用:Netty使用简单,通过一些很好的编解码器、ChannelHandler,可以快速构建出高性能的网络应用程序。

4.应用场景广泛:Netty可以应用于各种不同类型的网络应用,包括Web应用、游戏服务器等。

Netty的缺点:

1.需要深入理解Java NIO,不太友好。

2.不支持HTTP/2。

应用实例:

Netty的应用场景非常多,常见的应用场景有:

1.聊天服务器

2.游戏服务器

3.视频直播

4.高并发Web服务器

5.高性能代理服务器

6.安全、稳定的文件传输服务器

集成Springboot:

首先在pom.xml里添加以下依赖:

<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.29.Final</version>
</dependency>

接着创建一个NettyServerConfig类,如下:

@Configuration
public class NettyServerConfig {

@Value("${netty.server.host}")
private String host;
@Value("${netty.server.port}")
private int port;

/**
* Netty服务端ServerBootstrap配置
*/
@Bean(name = "nettyServerBootstrap")
public ServerBootstrap nettyServerBootstrap(){
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(nettyServerBossGroup(), nettyServerWorkerGroup())
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 1024)
.childOption(ChannelOption.SO_KEEPALIVE, true)
.childOption(ChannelOption.TCP_NODELAY, true)
.childHandler(new NettyServerChannelInitializer());
return serverBootstrap;
}

/**
* Netty服务端EventLoop Group,负责处理网络事件
*/
@Bean(name = "nettyServerBossGroup")
public NioEventLoopGroup nettyServerBossGroup() {
return new NioEventLoopGroup(1);
}

/**
* Netty服务端EventLoop Group,负责处理网络事件
*/
@Bean(name = "nettyServerWorkerGroup")
public NioEventLoopGroup nettyServerWorkerGroup() {
return new NioEventLoopGroup();
}

/**
* Netty服务端绑定的IP和端口号
*/
@Bean(name = "nettyServerSocketAddress")
public InetSocketAddress nettyServerSocketAddress() {
return new InetSocketAddress(host, port);
}


@PreDestroy
private void preDestroy() throws InterruptedException {
nettyServerBossGroup().shutdownGracefully().sync();
nettyServerWorkerGroup().shutdownGracefully().sync();
}
}

然后创建一个NettyServerChannelInitializer类,如下:

public class NettyServerChannelInitializer extends ChannelInitializer<SocketChannel> {

@Autowired
private NettyServerHandler nettyServerHandler;

@Override
protected void initChannel(SocketChannel ch) {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast(new DelimiterBasedFrameDecoder(1024 * 1024, Unpooled.wrappedBuffer(new byte[] {13, 10})));
pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
pipeline.addLast(new DelimiterBasedFrameEncoder(Unpooled.wrappedBuffer(new byte[] {13, 10})));
pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
pipeline.addLast(nettyServerHandler);
}
}

最后创建一个NettyServerHandler类,如下:

@Component
@Sharable
public class NettyServerHandler extends SimpleChannelInboundHandler<String> {

/**
* 接收到客户端数据
*/
@Override
protected void channelRead0(ChannelHandlerContext ctx, String request) throws Exception {
System.out.println(request);
// do something...
}

/**
* 异常处理
*/
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
cause.printStackTrace();
ctx.close();
}
}

完整代码可以参考以下Github地址:

https://github.com/wangsbJava/netty-springboot-demo/

目录
相关文章
netty
netty
67 0
|
3月前
|
设计模式 网络协议 NoSQL
netty(四)
netty(四)
|
4月前
|
JavaScript 网络安全
Netty在Firbase中的使用
这篇文章探讨了Netty在Firebase实时数据同步服务中的应用,包括长轮询、HTTP 1.1 keep-alive和流水线化、控制SSL处理器等,展示了Netty如何支持Firebase处理高并发的网络通信和多种协议。
48 1
|
6月前
|
消息中间件 编解码 Java
Netty介绍
Netty介绍
61 4
Netty介绍
|
7月前
|
存储 安全 Java
为什么Netty要造FastThreadLocal?
Netty 的 FastThreadLocal 是一种高效的线程局部变量,设计用于解决标准 ThreadLocal 的性能和内存泄漏问题。FastThreadLocal 通过使用数组而非哈希表存储数据,避免了哈希冲突带来的性能损耗,查询效率达到 O(1)。此外,FastThreadLocal 提供了 remove() 方法和 FastThreadLocalRunnable 类,以防止内存泄漏,确保在执行完成后自动清理对象。相比于 ThreadLocal,FastThreadLocal 具有更高的性能和安全性。
|
7月前
|
监控 前端开发 Java
Netty使用篇
Netty使用篇
|
安全 Java Linux
Netty4 使用总结
Netty4 使用总结
58 0
|
消息中间件 网络协议 Dubbo
Netty是什么,为什么要使用Netty?
最近,也不知道什么原因,经常有粉丝问我关于Netty的问题。难道是大厂面试更卷了,开始关注更加底层的框架了?先不深究什么原因了,今天,我给大家分享一下什么是Netty,它能解决什么问题?
97 0
|
JSON 移动开发 网络协议
Netty应用篇
Netty应用篇
97 0
|
消息中间件 分布式计算 网络协议
初识Netty
Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty是一个NIO客户端服务器框架,可以快速轻松地开发网络应用程序,例如协议服务器和客户端。它极大地简化了TCP和UDP套接字服务器等网络编程
541 0