![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
IO
jiang_zf
这个作者很懒,什么都没留下…
展开
-
Netty学习10-Netty的socket攻击及预防
在前面的文章我们说到过,可以采用长度+数据的格式定义包结构;但是如果长度定义的特别大,那么缓冲区必然会存储不下,而引起宕机或其他问题。这便是一种socket攻击。除此之外,如果定义的长度和实际长度不匹配,比如实际长度为5,定义的长度为6,那么读取的时候可能会把下一个数据包的一部分读取到,造成以后的数据不能正常解析;这也是一种socket攻击。可以通过以下几个方面处理socket攻击:1...原创 2019-11-26 19:51:24 · 1744 阅读 · 1 评论 -
Netty学习09-粘包和分包及FrameDecoder源码解析
粘包出现的原因:服务端与客户端没有约定好要使用的数据结构。Socket Client实际是将数据包发送到一个缓存buffer中,通过buffer刷到数据链路层。因服务端接收数据包时,不能断定数据包1何时结束,就有可能出现数据包2的部分数据结合数据包1发送出去,导致服务器读取数据包1时包含了数据包2的数据。这种现象称为粘包。分包:数据包数据被分开一部分发送出去,服务端一次读取数据时可能读取到完整数...原创 2019-11-25 20:53:03 · 307 阅读 · 0 评论 -
Netty学习08-netty消息在管道中流转分析
我在前面的文章中写到,给消息添加各种处理事件,但是这些处理事件是如何关联起来,做到都能够执行,而且会先执行上行的处理方法,然后处理下行的处理方法的。本文基于netty-3.10.5.Final源码做一个简单的分析。前面《netty学习04-编写一个简单NIO系统》我们已经分析过服务的启动过程,我们知道在服务启动后,AbstractNioWorker会调用AbstractNioSelecto...原创 2019-11-24 17:17:13 · 340 阅读 · 0 评论 -
Netty学习07-protobuf序列化学习
Protobuf是一个灵活的、高效的用于序列化数据的协议。相比较XML和JSON格式,protobuf更小、更快、更便捷。Protobuf是跨语言的,并且自带了一个编译器(protoc),只需要用它进行编译,可以编译成Java、python、C++等代码,然后就可以直接使用,不需要再写其他代码,自带有解析的代码。protobuf协议是以一个 .proto 后缀的文件为基础,这个文件描述了存在哪...原创 2019-11-24 12:06:00 · 201 阅读 · 0 评论 -
Netty学习06-用Netty3和Netty5分别写一个心跳处理实例
心跳机制的意义:TCP空闲的时候是不会发送任何数据包。也就是说,当一个TCP的socket,客户端与服务端谁也不发送数据,会一直保持着连接。这其中如果有一方异常掉线(例如死机、路由被破坏、防火墙切断连接等),另一端如果没有发送数据,永远也不可能知道。这对于一些服务型的程序来说,是灾难性的后果,将会导致服务端socket资源耗尽。 所以为了保证连接的有效性、及时有效地检测到一方的非正常...原创 2019-11-24 11:16:57 · 153 阅读 · 0 评论 -
Netty学习05-用Netty5写一个简单的服务端和客户端
前面文章讲了如何通过Netty3写一个简单的例子,但是Netty4和Netty5同Netty3有很大的不同,这篇文章简单介绍下如何通过Netty5写一个简单的服务端和客户端例子。服务端1. 初始化一个NIO辅助服务类 //NIO服务的辅助启动类 ServerBootstrap bootstrap = new ServerBootstrap();2. ...原创 2019-11-17 15:39:18 · 197 阅读 · 0 评论 -
netty学习04-编写一个简单NIO系统
如果要提高NIO的工作效率可以通过两个方面入手:1.一个系统注册多个selector2.一个selector可以注册多个ServerSocketChannel业务代码的实现流程如图所示,详细解释和代码可查看附件:...原创 2019-11-05 19:31:37 · 133 阅读 · 0 评论 -
netty学习03-Netty客户端和服务端结合
在netty学习02-Netty初步学习-HelloNetty中已经学习了如何搭建netty服务端,下面介绍下如何搭建netty客户端。netty客户端搭建的流程和服务端类似,很多地方都是把Server缓冲Client即可。1.创建客户端服务类ClientBootstrap bootstrap=new ClientBootstrap();2.创建监听和消息接发的线程池Exe...原创 2019-11-03 16:46:33 · 203 阅读 · 0 评论 -
netty学习02-Netty初步学习-HelloNetty
创建Netty服务端的几个步骤:1.创建服务类ServerBootstrap bootstrap=new ServerBootstrap();2.创建监听端口线程和数据读写线程ExecutorService boss= Executors.newCachedThreadPool();ExecutorService worker=Executors.newCachedThrea...原创 2019-11-03 15:48:08 · 386 阅读 · 0 评论 -
netty学习01-传统IO和NIO的比较
传统IO的特点有两个阻塞点:1. server.accept();接收连接2.InputStream.read(bytes);读取数据单线程下只能有一个客户端连接,用线程池可以解决单个客户端连接的问题,但是太消耗性能。NIO的特点NIO是非阻塞的传统IO在通道中读取数据的时候,如果没有数据,会一直等待;而NIO(非阻塞IO)则会实时返回。NIO可以单线程处理多客户端...原创 2019-10-31 20:46:38 · 108 阅读 · 0 评论 -
Java NIO:IO与NIO的区别
一、概念 NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。二、NIO和IO的主要区别下表总结了Java IO和NIO之间的主要区别:IONIO面向流面向缓冲阻塞IO非阻塞IO无选择器 ...转载 2018-03-20 20:05:46 · 101 阅读 · 0 评论