【Netty系列(四)TCP拆包和粘包】教程文章相关的互联网学习教程文章

Netty系列(四)TCP拆包和粘包【代码】

Netty系列(四)TCP拆包和粘包一、拆包和粘包问题(1) 一个小的Socket Buffer问题在基于流的传输里比如 TCP/IP,接收到的数据会先被存储到一个 socket 接收缓冲里。不幸的是,基于流的传输并不是一个数据包队列,而是一个字节队列。即使你发送了 2 个独立的数据包,操作系统也不会作为 2 个消息处理而仅仅是作为一连串的字节而言。因此这是不能保证你远程写入的数据就会准确地读取。举个例子,让我们假设操作系统的 TCP/TP 协议栈已...

Netty系列之Netty百万级推送服务设计要点(转)【代码】

1. 背景1.1. 话题来源最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题。问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为如下几类:Netty是否可以做推送服务器?如果使用Netty开发推送服务,一个服务器最多可以支撑多少个客户端?使用Netty开发推送服务遇到的各种技术问题。由于咨询者众多,关注点也比较集中,我希望通过本文的案例分析和对推送服务设...

Netty系列之Netty可靠性分析

1. 背景1.1. 宕机的代价1.1.1. 电信行业毕马威国际(KPMG International)在对46个国家的74家运营商进行调查后发现,全球通信行业每年的收益流失约为400亿美元,占总收入的1%-3%。导致收益流失的因素有多种,主要原因就是计费BUG。1.1.2. 互联网行业美国太平洋时间8月16日下午3点50分到3点55分(北京时间8月17日6点50分到6点55分),谷歌遭遇了宕机。根据事后统计,短短的5分钟,谷歌损失了54.5万美元。也就是服务每中断一分钟,损失...

Netty系列之Netty百万级推送服务设计要点【代码】

原文:http://www.infoq.com/cn/articles/netty-million-level-push-service-design-points1. 背景1.1. 话题来源最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题。问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为如下几类:Netty是否可以做推送服务器?如果使用Netty开发推送服务,一个服务器最多可以支撑多少个客户端?使用Netty开发推送服务遇到的...

Netty源码学习系列之2-ServerBootstrap的初始化【代码】【图】

前言 根据前文我们知道,NioEventLoopGroup和NioEventLoop是netty对Reactor线程模型的实现,而本文要说的ServerBootstrap是对上面二者的整合与调用,是一个统筹者和协调者。具体netty使用的是Reactor单线程模型还是多线程模型、抑或者主从多线程模型,都是ServerBootstrap的不同配置决定的。 下面照例粘贴一下示例demo(以Reactor多线程模式构建),开始正文。 1publicclass NettyDemo1 {2// netty服务端的一般性写法 3publi...

Netty基础系列(4) --堆外内存与零拷贝【代码】

前言到目前为止,我们知道Nio当中有三个最最核心的组件,分别是:Selelctor,Channel,Buffer。在Netty基础系列(3) --彻底理解NIO 这一篇文章中只是进行了大致的介绍。我们现在来深入理解一下Buffer在 堆内创建内存 和 堆外创建内存 的底层原理,与 零拷贝 的具体实现。BufferBuffer是一个抽象类,首先我们来看看Buffer有哪些实现类。我们从上面这张截图可以看出,Buffer的直接子类有7种。除了Java中Boolean类型。剩余的7种基本类型...

netty系列之:Event、Handler和Pipeline【代码】【图】

目录简介ChannelPipelineChannelHandlerChannelHandlerContextChannelHandler中的状态变量异步Handler总结简介上一节我们讲解了netty中的Channel,知道了channel是事件处理器和外部联通的桥梁。今天本文将会详细讲解netty的剩下几个非常总要的部分Event、Handler和PipeLine。ChannelPipelinepipeLine是连接Channel和handler的桥梁,它实际上是一个filter的实现,用于控制其中handler的处理方式。当一个channel被创建的时候,和它对...

3. 彤哥说netty系列之Java BIO NIO AIO进化史【代码】【图】

你好,我是彤哥,本篇是netty系列的第三篇。简介上一章我们介绍了IO的五种模型,实际上Java只支持其中的三种,即BIO/NIO/AIO。本文将介绍Java中这三种IO的进化史,并从使用的角度剖析它们背后的故事。Java BIOBIO概念解析BIO,Blocking IO,阻塞IO,它是Java的上古产品,自出生就有的东西(JDK 1.0)。使用BIO则数据准备和数据从内核空间拷贝到用户空间两个阶段都是阻塞的。BIO使用案例public class EchoServer { public stati...

5. 彤哥说netty系列之Java NIO核心组件之Channel【代码】【图】

你好,我是彤哥,本篇是netty系列的第五篇。简介上一章我们一起学习了如何使用Java原生NIO实现群聊系统,这章我们一起来看看Java NIO的核心组件之一——Channel。思维转变首先,我想说的最重要的一个点是,学习NIO思维一定要从BIO那种一个连接一个线程的模式转变成多个连接(Channel)共用一个线程来处理的这种思维。1个Connection = 1个Socket = 1个Channel,这几个概念可以看作是等价的,都表示一个连接,只不过是用在不同的场景...

6. 彤哥说netty系列之Java NIO核心组件之Buffer【代码】【图】

——日拱一卒,不期而至!你好,我是彤哥,本篇是netty系列的第六篇。简介上一章我们一起学习了Java NIO的核心组件Channel,它可以看作是实体与实体之间的连接,而且需要与Buffer交互,这一章我们就来学习一下Buffer的特性。概念Buffer用于与Channel交互时使用,通过上一章的学习我们知道,数据从Channel读取到Buffer,或者从Buffer写入Channel。Buffer本质上是一个内存块,可以向里面写入数据,或者从里面读取数据,在Java中它被包...

7. 彤哥说netty系列之Java NIO核心组件之Selector【代码】【图】

——日拱一卒,不期而至!你好,我是彤哥,本篇是netty系列的第七篇。简介上一章我们一起学习了Java NIO的核心组件Buffer,它通常跟Channel一起使用,但是它们在网络IO中又该如何使用呢,今天我们将一起学习另一个NIO核心组件——Selector,没有它可以说就干不起来网络IO。概念我们先来看两段Selector的注释,见类java.nio.channels.Selector。注释IA multiplexor of {@link SelectableChannel} objects.它是SelectableChannel对象...

Netty源码学习系列之4-ServerBootstrap的bind方法【代码】【图】

前言 今天研究ServerBootstrap的bind方法,该方法可以说是netty的重中之重、核心中的核心。前两节的NioEventLoopGroup和ServerBootstrap的初始化就是为bind做准备。照例粘贴一下这个三朝元老的demo,开始本文内容。 1 public class NettyDemo1 {2 // netty服务端的一般性写法3 public static void main(String[] args) {4 EventLoopGroup boss = new NioEventLoopGroup(1);5 EventLoopGroup worker = ...

Netty源码学习系列之2-ServerBootstrap的初始化【代码】【图】

前言 根据前文我们知道,NioEventLoopGroup和NioEventLoop是netty对Reactor线程模型的实现,而本文要说的ServerBootstrap是对上面二者的整合与调用,是一个统筹者和协调者。具体netty使用的是Reactor单线程模型还是多线程模型、抑或者主从多线程模型,都是ServerBootstrap的不同配置决定的。 下面照例粘贴一下示例demo(以Reactor多线程模式构建),开始正文。 1 public class NettyDemo1 {2 // netty服务端的一般性写...

Netty源码学习系列之1-netty的串行无锁化【代码】【图】

前言 最近趁着跟老东家提离职之后、到新公司报道之前的这段空闲时期,着力研究了一番netty框架,对其有了一些浅薄的认识,后续的几篇文章会以netty为主,将近期所学记录一二,也争取能帮未对netty有过了解的园友对netty建立一个完整的认识。netty作为一个优秀的网络框架,值得为其花费一番时间。 netty的内容细究一下也有不少(虽然与Spring这种庞大的框架相比代码量少很多),本文作为netty系列的第一篇,决定先攀登一个高...

框架源码系列Spring5 Mybatis SpringBoot Dubbo Netty深度解析

1、IOC(控制反转)、AOP(切面)、DI (依赖注入)是spring的核心部分 Spring是一种设计思想的体现,发生了“主从换位”的变化。应用程序由主动的创建对象,转换称了从IOC容器里获取对象,对象的创建、解析和注册都由Spring来替用户实现,用户只管定义。2、IoC容器的设计与实现--Bean组件与Context组件使用Spring时,它首先替我们完成的时IOC容器的初始化,初始化的过程包括定义(BeanDefinition)、载入定义(loadBeanDefinit...