![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Netty学习
文章平均质量分 77
码拉松
这个作者很懒,什么都没留下…
展开
-
《Netty权威指南 第2版》学习笔记(7)--- WebSocket协议开发应用
前言WebSocket是一种在单个TCP连接上进行全双工的通信协议,WebSocket使得客户端和服务器之间的数据交换变的更加简单,允许服务器主动向客户端推送数据,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。HTTP协议的弊端很多网站为了实现推送技术,所用的技术都是轮询,轮询是在特定的时间间隔,由浏览器对服务器发送HTTP请求,然后由服务器返回最新的数据给客户端的浏览器,这种方式的主要弊端如下。(1)HTTP协议为半双工协议,半双工协议指数据可以在客户端原创 2021-03-08 16:21:51 · 183 阅读 · 0 评论 -
《Netty权威指南 第2版》学习笔记(6)--- HTTP协议开发应用
HTTP协议介绍HTTP是一个属于应用层的面向对象的协议,其主要特点如下。支持Client、Server模式简单—客户向服务器请求服务时,只需要指定服务URL,携带必要的请求参数或者消息体灵活—HTTP允许传输任意类型的数据对象,传输的内容类型由HTTP消息头中的Content-Type去标记无状态—HTTP协议是无状态协议,无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要之前的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的原创 2021-03-05 16:05:29 · 246 阅读 · 4 评论 -
《Netty权威指南 第2版》学习笔记(5)---MessagePack编解码
前言MessagePack是一个高效的二进制序列化框架,它像JSON一样支持不同语言之间的数据交换,但是它的性能更快,序列化之后的码流也更小。MessagePack的特点如下:1、编解码高效,性能高2、序列化之后的码流小3、支持跨语言演示案例...原创 2021-03-02 17:21:54 · 272 阅读 · 0 评论 -
《Netty权威指南 第2版》学习笔记(4)---在网络传输中使用Java序列化存在的问题
Java序列化的缺点Java序列化从JDK1.1版本就已经提供,它不需要添加额外的类库,只需实现java.io.Serializable并生成序列ID即可,因此,它从诞生之初就得到了广泛的应用。但是在远程服务调用(RPC)时,很少直接使用Java系列化进行消息的编解码和传输,原因主要归为如下几点。1、无法跨语言对于跨进程的服务调用,服务提供者可能会使用 C++或者其他语言开发,当我们需要和异构语言进程交互时 Java 序列化就难以胜任。由于 Java 序列化技术是 Java 语言内部的私有协议,其他原创 2021-02-26 11:12:29 · 136 阅读 · 5 评论 -
《Netty权威指南 第2版》学习笔记(3)---分隔符和定长解码器
前面介绍过上层应用协议为了对消息进行区分,解决策略一般采用如下4种方式。1、消息定长,累计读取到长度总和为定长LEN的报文后,就认为读取到了一个完整的消息,将计数器置位,重新开始读取下一个数据包。2、在包尾增加回车换行符进行分割,例如FTP,这种方式在文本协议中应用比较广泛。3、将特殊的分隔符作为消息的结束标志,回车换行符就是一种特殊的结束分隔符。4、通过在消息头中定义长度字段来标识消息的总长度。Netty对上面应用做了统一的抽象,提供了4种解码器来解决对应的问题,使用起来非常方便。有了这些解码器原创 2021-02-25 10:51:45 · 337 阅读 · 4 评论 -
《Netty权威指南 第2版》学习笔记(2)---解决TCP粘包、拆包问题
TCP粘包、拆包TCP是个“流”协议,所谓流,就是没有界限的一串数据,TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。我们可以通过图解对TCP粘包和拆包问题进行说明假设客户端分别发送了两个数据包D1和D2给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下4种情况。1、服务端分两次读取到了两个独立的数据包原创 2021-02-23 19:51:56 · 218 阅读 · 2 评论 -
《Netty权威指南 第2版》学习笔记(1)---服务端与客户端开发入门
服务端public class TimeServer { public void bind(int port) throws InterruptedException { //创建两个线程组,boss用于处理客户端连接事件,worker用于处理读写请求 //NioEventLoopGroup可以包含多个NIO线程,专门用于网络事件的处理,实际上它们就是Reactor线程组。 EventLoopGroup boss = new NioEventLoopGroup(原创 2021-02-22 14:06:12 · 214 阅读 · 1 评论