城乡与建设部网站,信息化项目建设背景,关于三亚的网页设计,泰语网站怎么建设什么是netty
Netty是一个基于Java NIO的异步事件驱动网络应用程序框架。它提供了简单易用的API#xff0c;用于快速开发可维护的高性能网络应用程序。Netty的设计目标是提供一种高度可扩展的、高性能的网络应用程序框架#xff0c;使得开发人员能够轻松地构建各种类型的网…什么是netty
Netty是一个基于Java NIO的异步事件驱动网络应用程序框架。它提供了简单易用的API用于快速开发可维护的高性能网络应用程序。Netty的设计目标是提供一种高度可扩展的、高性能的网络应用程序框架使得开发人员能够轻松地构建各种类型的网络应用包括但不限于服务器通信、实时通信、游戏服务器等。
Netty的核心是基于Channel、EventLoop和Handler的模型。它采用了事件驱动的方式通过Handler对事件进行处理实现了高效的并发处理和网络通信。Netty提供了丰富的编解码器和处理器使得开发人员能够轻松地构建复杂的网络应用逻辑。同时Netty还提供了高度可定制化的API使得开发人员能够根据具体需求进行灵活的定制和扩展。
由于其优秀的性能和灵活的设计Netty被广泛应用于各种类型的网络应用开发包括高性能的服务器通信、实时通信、大规模并发处理等领域。Netty已经成为Java领域中最受欢迎的网络应用程序框架之一受到了广泛的认可和应用. 绿色的部分Core核心模块包括零拷贝、API库、可扩展的事件模型。 橙色部分Protocol Support协议支持包括Http协议、webSocket、SSL(安全套接字协议)、谷歌Protobuf协议、zlib/gzip压缩与解压缩、Large File Transfer大文件传输等等。 红色的部分Transport Services传输服务包括Socket、Datagram、Http Tunnel等等。 以上可看出Netty的功能、协议、传输方式都比较全比较强大。
netty-demo
服务端
public class MyServer {public static void main(String[] args) throws Exception {//创建两个线程组 boosGroup、workerGroupEventLoopGroup bossGroup new NioEventLoopGroup();EventLoopGroup workerGroup new NioEventLoopGroup();try {//创建服务端的启动对象设置参数ServerBootstrap bootstrap new ServerBootstrap();//设置两个线程组boosGroup和workerGroupbootstrap.group(bossGroup, workerGroup)//设置服务端通道实现类型 .channel(NioServerSocketChannel.class)//设置线程队列得到连接个数 .option(ChannelOption.SO_BACKLOG, 128)//设置保持活动连接状态 .childOption(ChannelOption.SO_KEEPALIVE, true)//使用匿名内部类的形式初始化通道对象 .childHandler(new ChannelInitializerSocketChannel() {Overrideprotected void initChannel(SocketChannel socketChannel) throws Exception {//给pipeline管道设置处理器socketChannel.pipeline().addLast(new MyServerHandler());}});//给workerGroup的EventLoop对应的管道设置处理器System.out.println(java技术爱好者的服务端已经准备就绪...);//绑定端口号启动服务端ChannelFuture channelFuture bootstrap.bind(6666).sync();//对关闭通道进行监听channelFuture.channel().closeFuture().sync();} finally {bossGroup.shutdownGracefully();workerGroup.shutdownGracefully();}}
}服务端处理器
public class MyServerHandler extends ChannelInboundHandlerAdapter {Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {//获取客户端发送过来的消息ByteBuf byteBuf (ByteBuf) msg;System.out.println(收到客户端 ctx.channel().remoteAddress() 发送的消息 byteBuf.toString(CharsetUtil.UTF_8));}Overridepublic void channelReadComplete(ChannelHandlerContext ctx) throws Exception {//发送消息给客户端ctx.writeAndFlush(Unpooled.copiedBuffer(服务端已收到消息并给你发送一个问号?, CharsetUtil.UTF_8));}Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {//发生异常关闭通道ctx.close();}
}客户端
public class MyClient {public static void main(String[] args) throws Exception {NioEventLoopGroup eventExecutors new NioEventLoopGroup();try {//创建bootstrap对象配置参数Bootstrap bootstrap new Bootstrap();//设置线程组bootstrap.group(eventExecutors)//设置客户端的通道实现类型 .channel(NioSocketChannel.class)//使用匿名内部类初始化通道.handler(new ChannelInitializerSocketChannel() {Overrideprotected void initChannel(SocketChannel ch) throws Exception {//添加客户端通道的处理器ch.pipeline().addLast(new MyClientHandler());}});System.out.println(客户端准备就绪随时可以起飞~);//连接服务端ChannelFuture channelFuture bootstrap.connect(127.0.0.1, 6666).sync();//对通道关闭进行监听channelFuture.channel().closeFuture().sync();} finally {//关闭线程组eventExecutors.shutdownGracefully();}}
}客户端处理器
ublic class MyClientHandler extends ChannelInboundHandlerAdapter {Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception {//发送消息到服务端ctx.writeAndFlush(Unpooled.copiedBuffer(歪比巴卜~茉莉~Are you good~马来西亚~, CharsetUtil.UTF_8));}Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {//接收服务端发送过来的消息ByteBuf byteBuf (ByteBuf) msg;System.out.println(收到服务端 ctx.channel().remoteAddress() 的消息 byteBuf.toString(CharsetUtil.UTF_8));}
}Netty组件作用简介
EventLoop和EventLoopGroup
Netty中的EventLoop是处理I/O事件的线程负责处理连接、读写等操作。每个Channel都会被注册到一个EventLoop上由该EventLoop负责处理该Channel上的所有I/O事件。
而EventLoopGroup则是一组EventLoop的抽象它管理着一组EventLoop并负责为每个新创建的Channel分配一个EventLoop。EventLoopGroup可以理解为是一组线程池用于管理和调度EventLoop的执行。 一个EventLoopGroup 包含一个或者多个EventLoop一个EventLoop 在它的生命周期内只和一个Thread 绑定所有由EventLoop 处理的I/O 事件都将在它专有的Thread 上被处理一个Channel 在它的生命周期内只注册于一个EventLoop一个EventLoop 可能会被分配给一个或多个Channel。
Channel 为Netty 网络操作抽象类EventLoop 主要是为Channel 处理 I/O 操作两者配合参与 I/O 操作。当一个连接到达时Netty 就会注册一个 Channel然后从 EventLoopGroup 中分配一个 EventLoop 绑定到这个Channel上在该Channel的整个生命周期中都是有这个绑定的 EventLoop 来服务的 。
channel
Channel是 Java NIO 的一个基本构造。可以看作是传入或传出数据的载体。因此它可以被打开或关闭连接或者断开连接。
Bootstrap与ServerBootStrap
Bootstrap和ServerBootStrap是Netty提供的一个创建客户端和服务端启动器的工厂类使用这个工厂类非常便利地创建启动类根据上面的一些例子其实也看得出来能大大地减少了开发的难度。首先看一个类图 可以看出都是继承于AbstractBootStrap抽象类所以大致上的配置方法都相同。
一般来说使用Bootstrap创建启动器的步骤可分为以下几步 ChannelHandler 与 ChannelPipeline
Netty的ChannelHandler是用于处理入站和出站事件的组件它可以实现数据的编解码、业务逻辑处理等功能。ChannelHandler可以被添加到ChannelPipeline中用于处理Channel上的各种事件。
而ChannelPipeline则是一系列ChannelHandler的容器它负责管理和调度ChannelHandler的执行顺序。当数据在Channel中流动时会经过ChannelPipeline中的各个ChannelHandler每个ChannelHandler都可以对数据进行处理、转换或者传递给下一个ChannelHandler。 通过ChannelHandler和ChannelPipeline的组合使用Netty实现了高度灵活的事件处理机制使得开发人员能够轻松地构建复杂的网络应用逻辑。同时ChannelPipeline还支持动态地添加、删除和替换ChannelHandler使得网络应用的逻辑处理能够根据需求进行灵活的定制和扩展。