io
文章平均质量分 76
io
yygr
这个作者很懒,什么都没留下…
展开
-
字节流和字符流的区别
Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列。和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序列的对象被称为输入流;能够向其写入一个字节序列的对象被称为输出流。转载 2024-08-06 15:19:47 · 56 阅读 · 0 评论 -
Netty源码剖析-断开连接
就是将SelectionKey从Selector上cancel掉,这样的话这个Selector上就不会发生这个Channel的event了!表示不接受消息,接着往下走有个doClose0();这个时候writtenBytes=-1, -1表示正常关闭,然后返回-1;数据读取进行时,强行关闭,触发IO Exception,进而执行关闭。Channel的关闭包含了SelectKey的cancel.一直跟进去,直到看到javaChannel.close();再进入close();进入closeOnRead();转载 2024-08-05 16:22:04 · 24 阅读 · 0 评论 -
Netty 源码解析 ——— Netty 优雅关闭流程
本文是Netty文集中“Netty 源码解析”系列的文章。主要对Netty的重要流程以及类进行源码解析,以使得我们更好的去使用Netty。Netty是一个非常优秀的网络框架,对其源码解读的过程也是不断学习的过程。转载 2024-08-05 16:16:47 · 67 阅读 · 0 评论 -
Java 两种zero-copy零拷贝技术mmap和sendfile的介绍
传输方式上下文切换次数数据拷贝次数修改数据传统IO方式44中途可以修改数据mmap方式43中途可以修改数据23中途无法修改数据22中途无法修改数据有一个细节是,例如SocketChannelImpl或者FileChannelImpl在通过write写数据的时候,会判断Buffer是否是DirectBuffer,如果不是,则需要临时创建一个DirectBuffer,将数据拷贝到DirectBuffer,然后再通过DirectBuffer传输,也就是如果是则直接传输。转载 2024-04-15 14:27:37 · 386 阅读 · 0 评论 -
SSL与TLS到底有何区别,一见分晓
在SSL更新到3.0时,IETF对SSL3.0进行了标准化,并添加了少数机制,标准化后的IETF更名为TLS1.0(Transport Layer Security 安全传输层协议),可以说TLS就是SSL的新版本3.1。TLS使用了RFC-2104定义的HMAC算法,SSL3.0使用了类似的算法,虽然安全程度一样,但具体算法不一样,填充字节和秘钥之间采用的是连接运算,而HMAC采用的是异或运算。TLS的记录格式与SSL一样,但版本号不同,TLS的版本使用的是SSL 3.1。TLS有更严密的警报。转载 2023-01-11 12:05:20 · 298 阅读 · 0 评论 -
HTTP、HTTPS、SSL、TLS之间的关系
https://blog.csdn.net/qq78442761/article/details/87901022?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-87901022-blog-114220450.pc_relevant_aa&spm=1001.2101.3001.4242.1&utm_relevant_index=3目录HTTPHTTPSSSLTLS在标转载 2023-03-29 18:10:18 · 98 阅读 · 0 评论 -
java读取txt文件内容
【代码】java读取txt文件内容。转载 2022-10-06 09:16:22 · 2142 阅读 · 2 评论 -
HttpClient默认重试策略不处理SocketTimeoutException
coding时认为默认重试策略遇到连接超时是会重试的,但实际没有进行这种异常case的测试,也没有看默认策略的代码实现,所以线上出现超时并没有重试的情况。总结:为异常流程开发的处理方式,测试的时候虽然会麻烦些,但应该覆盖到,保证线上真正出现异常时恢复流程能正常work。转载于:https://my.oschina.net/hebaodan/blog/1795348。转载 2022-09-23 12:01:18 · 1002 阅读 · 0 评论 -
Netty专栏——粘包与拆包
Data}转载 2022-09-23 10:27:54 · 171 阅读 · 0 评论 -
远程过程调用(RPC)详解
https://blog.csdn.net/u014756578/article/details/84862515本文介绍了什么是远程过程调用(RPC),RPC 有哪些常用的方法,RPC 经历了哪些发展阶段,以及比较了各种 RPC 技术的优劣。RPC 是远程过程调用(Remote Procedure Call)的缩写形式,Birrell 和 Nelson 在 1984 发表于 ACM Transactions on Computer Systems 的论文《Implementing remote proce转载 2022-06-09 21:16:47 · 5696 阅读 · 0 评论 -
直观讲解一下 RPC 调用和 HTTP 调用的区别!
https://baijiahao.baidu.com/s?id=1685504157302223127&wfr=spider&for=pc很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单地介绍一下两种形式的C/S架构,先说一下他们最本质的区别,就是RPC主要是基于TCP/IP协议的,而HTTP服务主要是基于HTTP协议的,我们都知道HTTP协议是在传输层协转载 2022-06-09 20:01:07 · 2581 阅读 · 0 评论 -
18 张图彻底弄懂 HTTPS 的原理!
https://baijiahao.baidu.com/s?id=1685474345600994715&wfr=spider&for=pc近年来各大公司对信息安全传输越来越重视,也逐步把网站升级成 HTTPS 了。那么,大家知道 HTTPS 的原理是怎样的吗?到底它是如何确保信息安全传输的?本文试图由浅入深地把 HTTPS 讲明白,相信大家看完之后一定能明白HTTPS 的原理。HTTP 为什么不安全HTTP 由于是明文传输,主要存在三大风险:窃听风险、篡改风险、冒充风险。1.1 窃听风险中间人可以获取到通转载 2022-06-02 10:52:15 · 228 阅读 · 0 评论 -
rpc和http的区别是什么 各自的优缺点有哪些
http://www.ccutu.com/244407.htmlhttp是指从客户端到服务器端的请求消息,rpc是远程过程调用协议,它们之间有什么区别呢?1.rpc和http的区别是什么rpc和http的存在重大不同的是:http请求是使用具有标准语义的通用的接口定向到资源的,这些语义能够被中间组件和提供服务的来源机器进行解释。结果是使得一个应用支持分层的转换(layers of transformation)和间接层(indirection),并且独立于消息的来源,这对于一个Inter转载 2022-05-14 12:09:36 · 393 阅读 · 0 评论 -
7层负载均衡与4层负载均衡区别
https://blog.csdn.net/iKaChu/article/details/105977909先说结论:4 层负载均衡本质是转发,而 7 层负载本质是内容交换和代理一、OSI 7层模型与TCP/IP 4层模型OSI: open system interconnection 开放式系统互联参考模型OSI 7层模型 TCP/IP 4层模型 应用层 应用层 表示层 应用层 会话层 应用层 传输层 传输层 网络层 传输转载 2022-05-09 21:06:06 · 1001 阅读 · 0 评论 -
Netty 中的心跳机制详解
https://blog.csdn.net/youanyyou/article/details/117757273我们知道在TCP长连接或者WebSocket长连接中一般我们都会使用心跳机制–即发送特殊的数据包来通告对方自己的业务还没有办完,不要关闭链接。那么心跳机制可以用来做什么呢?我们知道网络的传输是不可靠的,当我们发起一个链接请求的过程之中会发生什么事情谁都无法预料,或者断电,服务器重启,断网线之类。如果有这种情况的发生对方也无法判断你是否还在线。所以这时候我们引入心跳机制,在长链转载 2022-04-21 21:40:01 · 5537 阅读 · 0 评论 -
用netty实现客户端断线重连
https://blog.csdn.net/haohaoxuexiyai/article/details/116497444一、NettyClient/** * 实现了重连的客户端 */public class NettyClient { private String host; private int port; private Bootstrap bootstrap; private EventLoopGroup group; publ...转载 2022-04-21 21:08:16 · 5049 阅读 · 0 评论 -
Netty客户端channel主动关闭时,服务端感知并关闭channel的过程
https://blog.csdn.net/u010013573/article/details/86485856 关闭channel时,会调用unsafe的close,故可以在服务端中,在AbstractChannel#AbstractUnsafe的close(final ChannelPromise promise)方法上设置断点:这个是比较顶层的方法。 往下看底层开始时的调用栈:在selector接收到该channel的读写事件时,调用processSelectedKey处理进行处转载 2022-04-25 07:40:54 · 3137 阅读 · 0 评论 -
TCP滑动窗口机制与原理详解
https://www.fujieace.com/jingyan/tcp-window-protocol.htmlTCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议。既然是一个可靠的传输协议就需要对数据进行确认。TCP协议里窗口机制有2种:一种是固定的窗口大小;另一种是滑动的窗口。这个窗口大小就是我们一次传输几个数据。对所有数据帧按顺序赋予编号,发送方在发送过程中始终保持着一个发送窗口,只有落在发送窗口内的帧才允许被发送;同时接收方也维持着一个接收窗口,只有落在接收窗转载 2022-04-21 14:52:51 · 2266 阅读 · 0 评论 -
滑动窗口:TCP的经典算法
https://baijiahao.baidu.com/s?id=1722866804266375910&wfr=spider&for=pc链路状态算法的每个节点,通过通信,都构建了完整的网络拓扑图,然后根据 Dijkstra 算法独立地计算最短路径,并依据计算结果维护动态路由表;距离矢量算法,则是通过节点间的通信了解邻居到每个不同节点的距离,以此作为选路依据,所以链路上传输的压力比链路状态算法小了很多,但也因为没有全局的信息,网络出现故障时很容易陷入无穷计算问题。在计算转载 2022-04-21 14:51:20 · 382 阅读 · 0 评论 -
Netty——任务队列
https://pyc-ycy.blog.csdn.net/article/details/122008193?spm=1001.2014.3001.5502一、概述任务队列中的 Task 有3种典型的使用场景: 1)用户程序自定义的普通任务 2)用户自定义的定时任务 3)非当前 Reactor 线程调用 Channel 的各种方法 例如在推送系统的业务线程里,根据用户的标识,找到对应的Channel 引用,然后调用 Write 类方法向该用户推送消息,就会进入到这转载 2022-04-20 21:34:59 · 203 阅读 · 0 评论 -
Netty教程(九)——解码器
https://juejin.cn/post/6889632659979862029ByteToMessageDecoder看看ByteToMessageDecoder这个解码器的channelRead方法public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { if (msg instanceof ByteBuf) { //存放解析出来的结果转载 2022-04-20 21:29:32 · 1353 阅读 · 0 评论 -
Netty教程(八)——事件和异常的传播
https://juejin.cn/post/6889263643456700423ChannelRead事件的传播在自定义handler的时候,通常要重写channelRead函数,如果想要将该事件向后传播(注意,传播顺序与handler添加顺序相同),需要调用fireChannelRead函数,ChannelRead事件便在这里中断通常在重写的channelRead函数里,有两种传播ChannelRead事件的方式public void channelRead(ChannelHan转载 2022-04-20 21:19:41 · 1972 阅读 · 0 评论 -
Netty教程(七)——ChannelHandler的添加和删除
https://juejin.cn/post/6888879547744256008ChannelHandler的添加ChannelHandler的添加在DefaultChannelPipeline#addLast方法里public final ChannelPipeline addLast(ChannelHandler... handlers) { return addLast(null, handlers);}public final ChannelPipeline ad转载 2022-04-20 21:00:14 · 800 阅读 · 0 评论 -
Netty教程(六)——pipeline初始化
https://juejin.cn/post/6888879138606678030Netty中pipeline的创建在AbstractChannel的的构造函数中,这里会创建一个DefaultChannelPipeline,所以一个channel和一个pipeline绑定下面来看看DefaultChannelPipeline的构造函数protected DefaultChannelPipeline(Channel channel) { this.channel = ObjectU转载 2022-04-20 20:31:19 · 639 阅读 · 0 评论 -
Netty教程(五)——新连接接入
https://juejin.cn/post/6888513963647369224在NioEventLoop#processSelectedKey方法里这么一段代码if ((readyOps & (SelectionKey.OP_READ | SelectionKey.OP_ACCEPT)) != 0 || readyOps == 0) { unsafe.read();}这里就有处理新连接接入的事件,现在跟进去到AbstractNioMessageChannel内部类转载 2022-04-20 20:25:48 · 387 阅读 · 0 评论 -
Netty教程(四)——NioEventLoop执行
https://juejin.cn/post/6888135277685473287NioEventLoop执行过程在NioEventLoop#run方法里protected void run() { int selectCnt = 0; for (;;) { try { int strategy; try { strategy = selectStrategy.calculateS转载 2022-04-20 20:24:17 · 311 阅读 · 0 评论 -
netty教程(三)——NioEventLoopGroup创建
https://juejin.cn/user/1451011081254792/posts以netty的一个小demo为例(使用的源码版本为4.1.50.Final)demo里使用到了NioEventLoopGroup,一路跟进会调用到这个类一个比较复杂的构函数public NioEventLoopGroup(int nThreads, Executor executor, final.转载 2022-04-20 20:23:12 · 362 阅读 · 0 评论 -
Netty教程(二)-服务端启动(二)——注册selector和端口绑定
https://juejin.cn/post/6887395440619651080接上篇Netty服务端启动(一)——创建和初始化channel注册selector先概括一下,主要做了这几件事设置eventloop(用于绑定线程) 调用jdk底层的SelectableChannel类的register方法进行注册 触发handler被添加到channel上的回调,触发channel注册成功事件注册selector的过程就在config().group().register(ch.转载 2022-04-20 20:21:48 · 340 阅读 · 0 评论 -
Netty教程(一)-服务端启动(一)——创建和初始化channel
https://juejin.cn/post/6887195923832078343以netty的一个小demo为例(使用的源码版本为4.1.50.Final)从b.bind(PORT)跟进最终调用到AbstractBootstrap#doBind这个方法private ChannelFuture doBind(final SocketAddress localAddress) { final ChannelFuture regFuture = initAndRegister(转载 2022-04-20 20:19:37 · 622 阅读 · 0 评论 -
为什么TCP4次挥手时等待为2MSL?
https://www.zhihu.com/question/67013338问题B收到ACK,关闭连接。但是A无法知道ACK是否已经到达B,于是开始等待?等待什么呢?假如ACK没有到达B,B会为FIN这个消息超时重传 timeout retransmit ,那如果A等待时间足够,又收到FIN消息,说明ACK没有到达B,于是再发送ACK,直到在足够的时间内没有收到FIN,说明ACK成功到达。这个等待时间至少是:B的timeout + FIN的传输时间那么B的timeout时间不应该是FIN传送时间的最转载 2022-02-21 19:58:53 · 1318 阅读 · 0 评论 -
计算机网络——到底什么是套接字?
https://blog.csdn.net/shang_0122/article/details/104273944?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164516566216780261952215%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164516566216780261952215&biz_id=0&a转载 2022-02-18 15:01:35 · 899 阅读 · 0 评论 -
非对称加解密,私钥和公钥到底是谁来加密,谁来解密
https://blog.csdn.net/qq_23167527/article/details/80614454第一种用法:公钥加密,私钥解密。—用于加解密第二种用法:私钥签名,公钥验签。—用于签名有点混乱,不要去硬记,总结一下:你只要想:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。同一种道理,我在换种说法:私钥和公钥是一对,转载 2022-02-21 21:16:08 · 665 阅读 · 0 评论 -
Request与session与application的作用域范围
https://www.cnblogs.com/zhoudi/p/5995783.htmlrequest对象request对象内数据的存活范围就是在request对象的存活范围内当客户端向服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被销毁了;之后再向服务器端发送新的请求时,服务器会创建新的request对象,该request对象与之前的request对象没有任何关系,因此也无法获得在之前的request对象中所存放的任何数据。session对象session对象内数据的存活范转载 2022-02-23 16:56:39 · 2054 阅读 · 0 评论 -
什么是Socket?简单点,通俗易懂的?
https://www.cnblogs.com/baxianhua/p/9285102.html网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。Socket的英文原义是"孔"或"转载 2022-02-18 12:49:41 · 879 阅读 · 0 评论 -
Netty 专栏——Netty及其核心组件
https://pyc-ycy.blog.csdn.net/article/details/121875863Netty 专栏——Netty及其核心组件一、Netty概述1、原生NIO的缺点1)NIO的类库和API库繁杂,使用麻烦,需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等 2)需要具备其他额外的技能:Java多线程和Java网络编程,因为NIO涉及到Reactor模式 3)开发工作量和难度非常大:客户端断转载 2022-04-19 09:50:05 · 324 阅读 · 0 评论 -
如何深刻理解Reactor和Proactor?
https://www.zhihu.com/question/26943938正好最近系统学习了这两个东西,写了篇8000+ 字总结,带你图解 Reactor 和 Proactor这两个高性能网络模式。别小看这两个东西,特别是 Reactor 模式,市面上常见的开源软件很多都采用了这个方案,比如 Redis、Nginx、Netty 等等,所以学好这个模式设计的思想,不仅有助于我们理解很多开源软件,而且也能在面试时吹逼。发车!演进如果要让服务器服务多个客户端,那么最直接..转载 2022-04-19 09:50:48 · 193 阅读 · 0 评论 -
设计模式 - Reactor 模式
https://blog.csdn.net/saienenen/article/details/1114009111. Reactor模式简介Netty是典型的Reactor模型结构。Reactor模式也叫反应器模式,大多数IO相关组件如Netty、Redis在使用的IO模式。2. 多线程 IO 的致命缺陷最最原始的网络编程思路就是服务器用一个while循环,不断监听端口是否有新的套接字连接,如果有,那么就调用一个处理函数处理,类似:while(true){ socket转载 2022-04-19 09:51:23 · 5540 阅读 · 0 评论 -
Netty 使用教程
https://www.cnblogs.com/hellozjf/p/15704443.html参考教程尚硅谷Netty视频教程(B站超火,好评如潮)002.Netty是什么Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目 Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。 Netty 主要针对在 TCP 协议下,面向 Clients 端的高并发应用,或者 Peer to Peer 场景转载 2022-04-19 09:51:31 · 3519 阅读 · 0 评论 -
NIO中Epoll Bug产生的原因以及Netty中是如何解决的
https://blog.csdn.net/speakguoer/article/details/120132750https://blog.csdn.net/qq_40751552/article/details/111715056文章目录 产生原因 Java官方解释 问题复现 产生原因正常情况下,select()方法在没有事件时,程序一直阻塞在该方法,但是在没有任何事件的情况下,该方法被唤醒,但是在程序对seclectionKey进行遍历时,却没有任何k转载 2022-04-18 08:07:59 · 2157 阅读 · 0 评论 -
select、poll、epoll详解
https://blog.csdn.net/shawntime/article/details/115089947IO读写基本原理用户程序进行IO操作实际依赖于linux系统内核read()、write()函数read()函数的调用并不是直接从网卡把数据读取到用户内存中,而是把内核缓冲区中的数据复制到用户缓冲区中write()函数的调用也并不是直接把数据写入网卡中,而是把用户缓冲区的数据写入到内核缓冲区中网卡与内核缓冲区数据的读写则是由操作系统内核完成阻塞IO和非阻塞IO转载 2022-04-18 08:08:07 · 13330 阅读 · 5 评论