netty
文章平均质量分 77
惜暮
这个作者很懒,什么都没留下…
展开
-
3. [netty-RPC]--服务端程序设计
下面一步步讲解服务端程序的设计,先借用前面一节关于服务端程序设计流程图: 1. 业务核心线程池的实现在服务端的线程池,我自己基于JDK的ThreadPoolExecutor做了一个自我定制,实现了核心业务线程池,实现源码如下:package com.netty.rpc.core;import java.util.concurrent.Executor;import java.util.concu原创 2017-02-10 17:24:23 · 807 阅读 · 0 评论 -
2. [netty-RPC]--消息的请求、响应与接口和实现的映射容器
首先来说说服务端和客户端交互的中介,也就是消息的请求和响应的定义 以及 服务端对接口和实现的映射容器。RPC请求消息结构先给出源码:package com.netty.rpc.model;import org.apache.commons.lang3.builder.ReflectionToStringBuilder;import java.io.Serializable;/** * 消息的请求原创 2017-02-10 15:04:11 · 1489 阅读 · 0 评论 -
1. 基于netty的高性能RPC服务器技术简介
RPC(Remote Procedure Call Protocol) 远程过程调用协议,是一种通过网络,向远程计算机程序上请求服务,而不必了解底层网络技术的协议。简单点说就是客户端在不必知道调用细节的前提下,调用远程计算机上运行的某个对象,使用起来就像调用本地的对象一样。目前典型的RPC框架有Facebook开源的Thrift、阿里巴巴的Dubbo等等。RPC针对网络协议和网络IO是透明的,对于调原创 2017-02-09 23:53:04 · 979 阅读 · 0 评论 -
netty的引导程序ServerBootStrap
BootStrap在netty的应用程序中负责引导服务器和客户端。netty包含了两种不同类型的引导: 1. 使用服务器的ServerBootStrap,用于接受客户端的连接以及为已接受的连接创建子通道。 2. 用于客户端的BootStrap,不接受新的连接,并且是在父通道类完成一些操作。ServerBootStrap的运行原理下面先看一下这两个引导类的类继承图: 服务端的ServerBoot原创 2016-12-19 14:36:07 · 18681 阅读 · 3 评论 -
[netty]-消息编解码之Java原生序列化
消息对象在网络上传输时,我们往往要对消息进行编解码。现在编解码技术非常多,包括Java原生的序列化、Google的protoBuf、hessian等等。这一篇博客我们主要介绍Java的原生序列化编解码以及其优缺点。基于Java提供的对象输入/输出流 ObjectInputStream和ObjectOutputStream可以直接将对象序列化为可存储的字节数组写入文件或则是在网络上传输。Java对象原创 2017-02-01 13:23:31 · 2138 阅读 · 0 评论 -
[netty]--分隔符解码器DelimiterBasedFrameDecoder和定长解码器FixedLengthFrameDecoder
TCP以流的方式进行数据传输,上层应用协议为了对消息进行区分,往往采用如下4种方式。 (1)消息长度固定:累计读取到固定长度为LENGTH之后就认为读取到了一个完整的消息。然后将计数器复位,重新开始读下一个数据报文。(2)回车换行符作为消息结束符:在文本协议中应用比较广泛。(3)将特殊的分隔符作为消息的结束标志,回车换行符就是一种特殊的结束分隔符。(4)通过在消息头中定义长度字段来标示消息的总长度原创 2017-01-31 17:51:07 · 6199 阅读 · 1 评论 -
[netty]-消息编解码之google的Protobuf编解码
前面介绍了通过Java原生的序列化来实现编解码在网络传输,也说到了其诸多缺点,下面介绍另外一种业界现在非常流行的编解码方式:Protobuf。、原创 2017-02-01 13:54:44 · 932 阅读 · 0 评论 -
[netty源码分析]--EventLoopGroup与EventLoop 分析netty的线程模型
netty核心类源码解析:分析netty的运行机制 EventLoopGroup与EventLoop解析:分析netty的线程模型 这一篇博文主要是从源码层次分析netty的线程模型。netty之所以是高性能NIO框架,其中主要贡献之一就是netty的线程模型的高性能,我们都知道netty的线程模型是基于Reactor线程模型,下面我们就来分析一下对于netty的reactor原创 2017-03-14 16:40:24 · 10041 阅读 · 7 评论 -
[netty源码分析]--ChannelPipeline源码分析(一)
在前面我们已经分析过了netty的线程模型,了解了当线程池启动之后就会处于一种事件循环的状态,不断调用select() 函数,查询已注册的channel中的就绪事件。 下面我们就来研究一下当IO事件被获取之后是怎么在ChannelPipeline中的handler传递运行的。1. Channel和ChannelPipeline的关系在netty中,每个Channel 有且仅有一个ChannelPip原创 2017-03-15 23:57:21 · 1567 阅读 · 0 评论 -
[netty源码分析]--服务端启动的工作流程分析
服务端1.首先是实例化boss线程池和worker线程池实例化的就是 NioEventLoopGroup;这里我假设boss线程池初始化为1个线程,worker线程初始化为 2*CPU个数的线程数。说一下主要做了什么工作:(1)指定了线程池中线程数、线程池的执行器是ThreadPerTaskExecutor;(2)线程池中每个线程其实就是一个NioEventLoop,线程池指定了每个NioEvent原创 2017-03-17 12:21:32 · 2112 阅读 · 2 评论 -
netty中TCP的黏包/拆包解决之道
这篇博客的主要内容是: 1. TCP黏包/拆包的基础知识 2.没考虑TCP黏包/拆包 导致的异常案例 3.netty中解决TCP黏包/拆包的方法1.TCP黏包/拆包的原理TCP 是一个“流”协议,所谓流就是没有界限的一串数据。TCP并不了解上层业务数据的具体定义,它只会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送(拆包)原创 2017-01-31 12:03:32 · 6761 阅读 · 3 评论 -
基于netty的时间服务器demo
最近在在《netty权威指南》,这本书里面的netty的入门程序就是一个基于netty的时间服务器,下面我先给出这个时间服务器的实例,然后对逻辑做一定的说明,这个例子比较简单,只是后面的很多内容是基于这个案例来说明和加深的。服务端TimeServer 启动服务器类package netty.quanwei.p3;import io.netty.bootstrap.ServerBootstrap;i原创 2017-01-31 12:43:44 · 2444 阅读 · 1 评论 -
[netty]--核心源码类
Netty的10个核心类,清楚了解他们的结构对使用Netty很有用。可能有一些不会再工作中用到,但是也有一些很常用也很核心,你会遇到。 1. Bootstrap or ServerBootstrap 2. EventLoop 3. EventLoopGroup 4. ChannelPipeline 5. Channel 6. Future or ChannelFuture 7. Cha原创 2016-12-10 00:23:41 · 889 阅读 · 0 评论 -
[netty核心类]--ChannelPipeline和ChannelHandler源码分析
本文主要包括: (1)ChannelPipeline的功能说明和源码分析; (2)ChannelHandler的功能说明和源码分析;在netty中的ChannelPipeline和ChannelHandler的机制就很类似于J2EE中的Servlet和Filter过滤器,这类拦截器就很类似于责任链模式的一种变形。核心就是事件的拦截和用户业务逻辑的定制。netty中channel过滤器实原创 2017-02-19 13:27:06 · 1764 阅读 · 0 评论 -
[netty核心类]--缓冲区ByteBuf
本文主要包括以下内容: 1)ByteBuf的三种类型:heapBuffer(堆缓冲区)、directBuffer(直接缓冲区)以及Composite Buffer(复合缓冲区)。 2)ByteBuf的工作原理。 3)ByteBuf与JDK中ByteBuffer的区别以及对比 4)ByteBuf的引用计数器实现类AbstractReferenceCountedByt原创 2016-12-16 14:24:48 · 29687 阅读 · 0 评论 -
[netty]--最通用TCP黏包解决方案:LengthFieldBasedFrameDecoder和LengthFieldPrepender
前面已经说过: TCP以流的方式进行数据传输,上层应用协议为了对消息进行区分,往往采用如下4种方式。 (1)消息长度固定:累计读取到固定长度为LENGTH之后就认为读取到了一个完整的消息。然后将计数器复位,重新开始读下一个数据报文。 (2)回车换行符作为消息结束符:在文本协议中应用比较广泛。 (3)将特殊的分隔符作为消息的结束标志,回车换行符就是一种特殊的结...原创 2017-02-19 15:02:11 · 37677 阅读 · 10 评论 -
[netty核心类]--Channel和Unsafe类
主要内容: (1)Channel 功能说明 (2)Unsafe 功能说明 (3)Channel的主要实现子类源码分析 (4)Unsafe主要实现子类源码分析1.Channel功能说明channel是netty网络IO操作抽象出来的一个接口,主要功能有:网络IO的读写,客户端发起连接、主动关闭连接,链路关闭,获取通信双方的网络地址等。下面分类进行介绍:网络IO操作 (1)C原创 2017-02-18 00:59:50 · 4438 阅读 · 1 评论 -
[netty]--Reactor线程模型以及在netty中的应用
说道netty的线程模型,我们第一反应就是经典的Reactor线程模型,下面我们就来一起探讨一下三种经典的Reactor线程模型: 这里我们需要理解的一点是Reactor线程模型是基于同步非阻塞IO实现的。对于异步非阻塞IO的实现是Proactor模型。 本文主要包括 (1)Reactor单线程模型 (2)Reactor多线程模型 (3)主从Reacto原创 2017-02-19 17:16:46 · 7932 阅读 · 1 评论 -
[小项目]-netty实现聊天功能
Netty是一个Java的NIO客户端服务端框架可以快速的开发网络应用程序,比如客户端和服务端的协议,大大简化了网络程序的开发过程。我们知道Netty的整体架构主要由3部分组成:缓冲(buffer)、通道(channel)、事件模型(event model)。所有的高级也行都构建于这三个组件之上。下面我们基于这个架构实现一个简单的网络聊天功能。1.环境: JDK 7 Maven3原创 2017-01-12 19:14:08 · 10559 阅读 · 1 评论 -
netty的编解码器介绍
本blog主要介绍: 1. Codec 编解码器 2. Decoder 解码器 3. Encoder 编码器netty提供了强大的编解码器框架,使得我们编写自定义的编解码器很容易,也容易封装个重用。在网络应用中需要实现某种编解码器,将原始字节数据与自定义的消息对象进行互相转换。网络中都是以字节码的数据形式来传输数据的,服务器编码数据后发送到客户端,客户端需要对数据进行解码。编解码器由两部分组成原创 2017-01-16 19:10:13 · 11250 阅读 · 0 评论 -
netty中的ChannelHandler
本文主要介绍以下几个相关类: • ChannelPipeline • ChannelHandlerContext • ChannelHandler • Inbound vs outbound(入站和出站)接受客户端的连接和创建连接只是应用程序中的一步,更加重要的还是处理传入传出的数据。netty提供了强大的事件处理机制,允许用户自定义ChannelHandler的实现来处理数原创 2017-01-16 16:38:21 · 12856 阅读 · 0 评论