首页 > 其他分享 >博学谷学习记录 自我总结 用心分享 | Netty框架使用

博学谷学习记录 自我总结 用心分享 | Netty框架使用

时间:2023-05-14 18:01:37浏览次数:52  
标签:Netty Java NIO 博学 事件 服务器 用心 连接

Netty框架的作用
1. Netty是一款用于快速开发高性能的网络应用程序的Java框架。它封装了网络编程的复杂性,定义了一种架构模型和一套丰富的设计模式。通过Netty框架,可以编写更高效的、可复用的、可维护的代码。有了Netty,你可以实现自己的HTTP服务器,FTP服务器,UDP服务器,RPC服务器,WebSocket服务器,Redis的Proxy服务器,MySQL的Proxy服务器等等。

2. 传统的HTTP服务器的流程

创建一个ServerSocket,监听并绑定一个端口
一系列客户端来请求这个端口
服务器使用Accept,获得一个来自客户端的Socket连接对象
启动一个新线程处理连接
读Socket,得到字节流
解码协议,得到Http请求对象
处理Http请求,得到一个结果,封装成一个HttpResponse对象
编码协议,将结果序列化字节流
写Socket,将字节流发给客户端

3. Netty 体系结构
使用Netty可以比直接使用底层的Java API容易使用;在之前讲网络I/O的文章中讲过Java BIO与Java NIO;Java NIO使用了事件驱动模型;相比于BIO单线程可以支持更多的连接,并且NIO是异步的,对于数据读取、连接、监听是无阻塞的。Netty且有Java NIO的这些特性,并且比Java NIO有更好的性能和更易用的API。

Netty的核心组件与Java NIO基本相同:

Channel
ChannelHandler
Future
事件
Channel
在讲Java NIO时也有讲过Channel;在Java NIO中Channel的作用相当于一个通道,承载着数据的读与写以及4大事件。在Netty框架中Channel基本相同,它是Netty中可以代表一个硬件设备、一个文件、一个网络Socket或者一个可执行文件或者多个不同的I/O操作组件,它承载着读写操作。

ChannelHandler
一个ChannelHandler可以简单的理解为一个回调方法,在Netty内部使用回调来处理事件;当一个事件被触发时,与事件相关的ChannelHandler将被调用来响应这个事件的处理,下面可以通过一个服务端的示例来理解ChannelHandler的作用:

public class ConnectHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception{
System.out.println("Client :"+ctx.channel().remoteAddress() + " connected.");
}
}

当有一个客户端连接服务端后,服务端的Netty内部将有产生一个连接的事件,事件将触发ConnectHandler的回调触发

4. Future
在Netty中,Future提供了一种在操作完成时通知应用程序的方式。这个对象可以看作是一个异步操作结果的占位符;它将在未来某个时刻完成并提供对结果的访问。Netty框架提供了ChannelFuture,它是一个Netty自己实现的Future,继承自JDK的java.util.concurrent.Future。

ChannelFuture接口额外提供了注册一个或者多个GenericFutureListener实例的方法,监听器的回调方法operationComplete()将会在对应的操作完成时被调用。下面通过一个示例来说明:

5. 事件
Netty的核心之一,事件用于触发ChannelHandler。在网络中通常会有入站与出站的流量,在Netty中也将事件按入站与出站进行了分类。通过这些不同的事件分类可以清晰的当前网络中有哪些动作发生并对这些动作做出响应。可以记录日志、对数据做转换、对流进行控制和应用程序的业务逻辑处理等。

入站事件:

连接已经激活或者连接失活
数据读取
用户事件
错误事件
出站事件:

打开或者关闭远程连接
将数据写到或者冲刷到网络Socket
6. Netty运行原理

 

标签:Netty,Java,NIO,博学,事件,服务器,用心,连接
From: https://www.cnblogs.com/LiuLance/p/17399762.html

相关文章

  • Netty实战(06)-ChannelPipeline 接口
    1概述把ChannelPipeline看成拦截流经Channel的入、出站事件的ChannelHandler的实例链,就易看出这些ChannelHandler之间的交互如何组成一个应用程序数据和事件处理逻辑的核心。每个新建的Channel都会被分配一个新的ChannelPipeline。这项关联是永久性的;Channel既不能附加另外......
  • Netty 爱好者必看!一文详解 ChannelHandler 家族,助你快速掌握 Netty 开发技巧!
    1Channel接口的生命周期Channel定义了一组和ChannelInboundHandlerAPI密切相关的简单但功能强大的状态模型1.1Channel的状态状态描述ChannelUnregisteredChannel已经被创建,但还未注册到EventLoopChannelRegisteredChannel已经被注册到了EventLoopChannelActiveChanne......
  • netty运行测试类时报错:Unrecognized option: --illegal-access=deny
    netty(4.1.42.Final )运行netty-buffer模块测试类时报错:Unrecognizedoption:--illegal-access=deny Unrecognizedoption:--illegal-access=denyError:CouldnotcreatetheJavaVirtualMachine.Error:Afatalexceptionhasoccurred.Programwillexit.解题思路:1、......
  • vue 关于element el-dialog使用心得-传参问题
    最近写一个功能用到了弹窗,在弹窗内显示一个子组件。关于el-dialog的el-dialog:visible.sync="xxx  参考https://blog.csdn.net/startyangu/article/details/128029464?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%......
  • Netty之TCP粘包和拆包
    一、概述TCP是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样做虽然提高了效率,但......
  • Netty
    1.定义Netty是一个基于NIO的客户、服务器端的编程框架,使用Netty可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。(官方解释)1.Nio比Bio,Aio的优势......
  • ReactHub:我用 ChatGPT 搞了一个 React 的资源导航网站,谁有我用心啊!
    大家好,我是DOM哥。图谱年年有,今年我来盘!之前已经盘完了Vue的技术图谱,今天来盘React的。我用ChatGPT开发了一个React的资源导航网站。不管你是资深React用户,还是刚入门想学习React的小白,这个网站都能帮助到你。网站地址:https://dombro.site/react#/react项目托管......
  • java netty socket实例:报文长度+报文内容,springboot
    前言说实话,javanetty方面的资料不算多,尤其是自定义报文格式的,少之又少自己写了个简单的收发:报文长度+报文内容发送的话,没有写自动组装格式,自己看需求吧,需要的话,自己完善服务端启动可以直接用类文件启动,也可以通过springboot。我这里写的是用springboot启动的,可以自己按照需求自......
  • netty 与 mina比较(转)
    Netty和mian比较报告一、数据测试报告简述:1、启动服务器,等到客户端接入    2、客户端发送链接请求。当已经链接,记录当前时间并向服务端发送约50m数据,每次1kb.          3、当服务端接收到链接,第一次接收到数据后,记录当前时间          4、服务端将接收......
  • Netty_Redis_Zookeeper高并发实战-读书笔记
    第1章    高并发时代的必备技能1.nettyNetty是JBOSS提供的一个Java开源框架,基于NIO的客户端/服务器编程框架,能够快速开发高并发、高可用、高可靠的网络服务器程序,也能开发高可用、高可靠的客户端程序。NIO是指:非阻塞输入输出(Non-BlockingIO)。优点:API使用简单,开发门槛......