【Java进阶】
清迈啊
就是这么牛逼,就是这么简单,好吧
展开
-
Netty学习(一)-为什么选择Netty
前面我们简单学习了NIO。我们知道java的I/O模型一共有四种,分别是:传统的BIO,伪异步I/O,NIO和AIO。为了澄清概念和分清区别,我们还是先简单的介绍一下他们的概念,然后再去比较优劣。以及探讨我们为什么使用netty。1.概念澄清1.1 BIOBIO,即Blocking I/O。网络编程的基本模型是Client/Server 模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息...转载 2018-05-29 17:15:40 · 533 阅读 · 0 评论 -
Netty学习(九)-Netty编解码技术之Marshalling
前面我们讲过protobuf的使用,主流的编解码框架其实还有很多种:①JBoss的Marshalling包②google的Protobuf③基于Protobuf的Kyro④Apache的Thrift12345678JBoss Marshalling是一个Java对象的序列化API包,修正了JDK自带的序列化包的很多问题,但又保持跟java.io.Serializable接口的兼容;同...转载 2018-05-29 17:25:03 · 496 阅读 · 0 评论 -
Netty学习(八)-Netty的心跳机制
我们知道在TCP长连接或者WebSocket长连接中一般我们都会使用心跳机制–即发送特殊的数据包来通告对方自己的业务还没有办完,不要关闭链接。那么心跳机制可以用来做什么呢?我们知道网络的传输是不可靠的,当我们发起一个链接请求的过程之中会发生什么事情谁都无法预料,或者断电,服务器重启,断网线之类。如果有这种情况的发生对方也无法判断你是否还在线。所以这时候我们引入心跳机制,在长链接中双方没有数据交互的...转载 2018-05-29 17:24:23 · 811 阅读 · 0 评论 -
Netty学习(七)-Netty编解码技术以及ProtoBuf和Thrift的介绍
在前几节我们学习过处理粘包和拆包的问题,用到了Netty提供的几个解码器对不同情况的问题进行处理。功能很是强大。我们有没有去想这么强大的功能是如何实现的呢?背后又用到了什么技术?这一节我们就来处理这个问题。了解一下编码解码到底是如何处理的。通常说的编码(Encoder)也就是发生在发送消息的时候需要将消息编译成字节对象,在Netty中即编译成ByteBuf对象。在java中我们将这种编译称之为序列...转载 2018-05-29 17:23:22 · 477 阅读 · 0 评论 -
Netty学习(六)-LengthFieldBasedFrameDecoder解码器
在TCP协议中我们知道当我们在接收消息时候,我们如何判断我们一次读取到的包就是整包消息呢,特别是对于使用了长连接和使用了非阻塞I/O的程序。上节我们也说了上层应用协议为了对消息进行区分一般采用4种方式。前面三种我们都说了,第四种是:通过在消息头定义长度字段来标识消息总长度。这个我们还没讲。当然Netty也提供了相应的解码器:LengthFieldBasedFrameDecoder。大多数的协议(私...转载 2018-05-29 17:22:33 · 874 阅读 · 0 评论 -
Netty学习(五)-DelimiterBasedFrameDecoder
上一节我们说了LineBasedframeDecoder来解决粘包拆包的问题,TCP以流的方式进行数据传输,上层应用协议为了对消息进行区分,一般采用如下4种方式:消息长度固定,累计读取到消息长度总和为定长Len的报文之后即认为是读取到了一个完整的消息。计数器归位,重新读取。将回车换行符作为消息结束符。将特殊的分隔符作为消息分隔符,回车换行符是他的一种。通过在消息头定义长度字段来标识消息总长度。Li...转载 2018-05-29 17:21:51 · 1476 阅读 · 0 评论 -
Netty学习(四)-TCP粘包和拆包
我们都知道TCP是基于字节流的传输协议。那么数据在通信层传播其实就像河水一样并没有明显的分界线,而数据具体表示什么意思什么地方有句号什么地方有分号这个对于TCP底层来说并不清楚。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段,之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。所以对于这个数据拆分成大包小包的问题就是我们...转载 2018-05-29 17:20:36 · 214 阅读 · 0 评论 -
Netty学习(三)-Netty重要接口讲解
上一节我们写了一个HelloWorld,对于Netty的运行有了一定的了解,知道Netty是如何启动客户端和服务器端。这一节我们简要的讲解一下几个重要的接口,初步探讨Netty的运行机制,当然刚学Netty就深入原理肯定是很枯燥的,所以我们就点到为止。1. ChannelPipeLine和ChannelHandler在上一篇中我们在ChannelInitializer类的initChannel方法...转载 2018-05-29 17:18:47 · 1091 阅读 · 0 评论 -
Netty学习(二)-Helloworld Netty
这一节我们来讲解Netty,使用Netty之前我们先了解一下Netty能做什么,无为而学,岂不是白费力气!1.使用Netty能够做什么开发异步、非阻塞的TCP网络应用程序;开发异步、非阻塞的UDP网络应用程序;开发异步文件传输应用程序;开发异步HTTP服务端和客户端应用程序;提供对多种编解码框架的集成,包括谷歌的Protobuf、Jboss marshalling、Java序列化、压缩编解码、XM...转载 2018-05-29 17:17:39 · 209 阅读 · 0 评论 -
Netty学习(十)-Netty文件上传
今天我们来完成一个使用netty进行文件传输的任务。在实际项目中,文件传输通常采用FTP或者HTTP附件的方式。事实上通过TCP Socket+File的方式进行文件传输也有一定的应用场景,尽管不是主流,但是掌握这种文件传输方式还是比较重要的,特别是针对两个跨主机的JVM进程之间进行持久化数据的相互交换。而使用netty来进行文件传输也是利用netty天然的优势:零拷贝功能。很多同学都听说过net...转载 2018-05-29 17:26:11 · 376 阅读 · 0 评论