不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2019-08-19 17:42  分类:Java  编辑

粘包和拆包

产生粘包和拆包问题的主要原因是,操作系统在发送TCP数据的时候,底层会有一个缓冲区,例如1024个字节大小,如果一次请求发送的数据量比较小,没达到缓冲区大小,TCP则会将多个请求合并为同一个请求进行发送,这就形成了粘包问题;如果一次请求发送的数据量比较大,超过了缓冲区大小,TCP就会将其拆分为多次发送,这就是拆包,也就是将一个大的包拆分为多个小包进行发送。

作者:php-note.com  发布于:2018-11-13 14:25  分类:Java  编辑

Netty:option 和 childOption 参数设置说明

作者:php-note.com  发布于:2018-11-04 16:30  分类:Java  编辑

本节是本RPC网络传输的最后一个小节,讲解了Netty的部分,我之前已经讲过很多Netty的运用的基本知识了,也写过相关的博客讲述过这个模块,这边就不再赘述了

Netty的模块,主要就是一些TCP的参数设置,handlers链的设置,编码器和译码器的编写,关于RPC的编码器和译码器,我们之前就讲述过了,也不多说,请求响应,我们之前也详细描述过

虽然之前说过很多次,我还是没有理解Netty 高水位和地水位的那个问题,希望有大神给出不设置高水位和低水位会出现的问题的代码和讲解

作者:php-note.com  发布于:2018-10-17 00:01  分类:Java  编辑

因为我们选用的是Netty,写过Netty的或者有一点Netty基础的,我勉强算是Netty刚刚入门的菜鸟吧,都知道我们需要C/S端写一个编码器和译码器。

关于编码器和译码器,有很多种实现方式,没有优劣之分,只有在某种场景下,哪种方式更加适合用的说法,小到StringDecoder/StringEncoder,大到自定义协议的Decoder/Encoder,都会有其最最适合它的场景。我们这节就是要找一个最最适合RPC的编码器和译码器

作者:php-note.com  发布于:2018-10-03 16:34  分类:Java  编辑

为什么要有引用计数器

Netty里四种主力的ByteBuf,其中UnpooledHeapByteBuf 底下的byte[]能够依赖JVM GC自然回收;而UnpooledDirectByteBuf底下是DirectByteBuffer,如 Java堆外内存扫盲贴 所述,除了等JVM GC,最好也能主动进行回收;而PooledHeapByteBuf 和 PooledDirectByteBuf,则必须要主动将用完的byte[]/ByteBuffer放回池里,否则内存就要爆掉。所以,Netty ByteBuf需要在JVM的GC机制之外,有自己的引用计数器和回收过程。

一下又回到了C的冰冷时代,自己malloc对象要自己free。 但和C时代又不完全一样,内有引用计数器,外有JVM的GC,情况更为复杂。

作者:php-note.com  发布于:2018-10-02 01:31  分类:Java  编辑

本章节包括:

1)OIO-------阻塞IO传输服务

2)NIO-------异步IO传输服务

3)本地传输服务-----在JVM内异步的通信

4)嵌入式传输服务------测试你的ChannelHandlers

作者:php-note.com  发布于:2018-10-01 23:11  分类:Java  编辑

在接下来的几个小节中,我们将为你讲解Channel,EventLoop,ChannelFuture这几个组件的细节的讨论,这几个组件可以视为Netty网络模块抽象的几个典范

1)Channel-------关键字:Sockets

2)EventLoop-------关键字:控制流,多线程,并发

3)ChannelFuture-------关键字:异步通知

作者:php-note.com  发布于:2018-10-01 11:36  分类:Java  编辑

图2.1展示了我们即将要编写的Netty服务器端和客户端的俯瞰图,如果你是一个专注于web开发的开发者我想你还是很熟悉的,你应该会对Netty服务器端和客户端的模型有着更深的完整理解。

作者:php-note.com  发布于:2018-09-23 19:31  分类:Java  编辑

在这个章节,我们将向你展示如果构建一个基于Netty的客户端和服务端,编写的例子很简单------客户端发送信息到服务器端,服务器端将信息原样返回,这个实战例子很重要,这这么两个原因:

 1)这个例子首先需要搭建你的开发环境,并且验证你的开发环境是否可用,当然,如果你打算我们列举的例子应用到你的项目之中做好准备,这也是很重要的

 2)你将获取亲手实践Netty的经验,感受前一章节我们讲述的:用ChannelHandlers去构建你的逻辑应用,这将为你在第三章的深入学习Netty打好良好的基础

作者:php-note.com  发布于:2018-09-23 17:32  分类:Java  编辑

 在这个章节中,我们将浅析Netty的几个核心组件

  1)Channels

  2)Callbacks

  3) Futures

  4) Events and handlers

 

这些构建模块代表了不同的结构种类:资源,逻辑,和通知,你的应用可以使用这些连接到网络,并且通过这些这些获取到数据流

对于每一个组件而言,我们将给一个最基本的定义,并且给出一个合适简单的例子说明它的作用