Netty
遮不住的殇
勤能补拙
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Netty-01 Linux网络I/O模型
在Linux系统内核中,所有的外部设备都被看成文件进行操作,对一个文件的读写操作会调用系统内核提供的命令,返回一个文件描述符的fd(file discriptor),而对一个socket的读写也会有相应的操作符,成为socketfd,描述符其实就是一个数字,指向内核中的一个结构体(文件路径,数据区等属性)...原创 2019-05-07 16:38:06 · 223 阅读 · 0 评论 -
Netty-13 Netty架构
一、Netty架构Netty采用了三层网络架构进行设计和开发,架构图如下:(一)Reactor通信调度层Netty的最底层是Reactor通信调度层,它通过一系列的辅助类,包括Reactor线程NioEventLoop及其父类。NioSocketChannel、NIOServerSocketChannel及其父类。ByteBuffer及其衍生出来的各种Buffer,UnSafe及其衍生的各...原创 2019-06-10 16:01:32 · 328 阅读 · 0 评论 -
Netty-12 Future和Promise
一、Futureio.netty.util.concurrent.Future继承自java.util.concurrent.Future,用来表示异步操作的结果。(一)jdk的Future定义了如下几个操作:cancel:取消操作get:获取操作的结果get(long,TimeUnit):获取操作结果,有超时时间,超过报错;isCancelled:是否已经取消了,如果取消了,返...原创 2019-06-10 14:30:17 · 372 阅读 · 0 评论 -
Netty-8 ByteBuf及相关辅助类
一、ByteBuf功能说明(一)ByteBuffer当我们进行数据传输的时候,往往用到数据缓冲区,常用的缓冲区是JDK NIO提供的java.nio.Buffer。在NIO中,7种基本数据类型(boolean除外)都有自己的缓冲区实现。对于NIO编程而言,主要使用的是ByteBuffer。然而,ByteBuffer有自己的一些缺陷:长度固定。一旦分配完成,容量不能进行扩展和收缩;只有...原创 2019-06-04 14:47:22 · 379 阅读 · 0 评论 -
Netty-7 服务端和客户端创建流程
通过对源码的解读,会对Netty有跟深入的理解,从本篇开始,记录一些源码的理解,本篇对入门案例的一些源码进行查看。一、服务端理解(一)服务端时序图...原创 2019-06-03 15:26:42 · 262 阅读 · 0 评论 -
Netty-6 Http协议支持-基础使用
Google的ProtoBuf在业界非常流行,很多商业项目都选择ProtoBuf作为序列化框架,下面我们对它进行一些讲解。ps:谷歌已经对华为使用谷歌的操作系统进行打击了,使用谷歌别的技术会不会有隐患呢?一、ProtoBuf优点在谷歌内部长期使用,产品成熟度很高;跨语言、支持多种语言;编码后的消息更小、更有利于传输和存储;编解码的性能非常高;支持不同版本协议的向前兼容;支持定义可...原创 2019-05-30 17:55:16 · 992 阅读 · 2 评论 -
Netty-11 EventLoop和EventLoopGroup
一、Reactor线程模型(一)Reactor单线程模型所有的操作都在同一个NIO线程里面完成。如:接受客户端的请求(Acceptor),读数据,解码,编码,写数据等等,这些操作都有相应的Handler进行处理,Acceptor接收到客户端的请求之后,根据不同的消息类型将ByteBuf进行Dispatch。由于使用的是异步非阻塞I/O,所有的I/O操作并不会阻塞,所以从理论上讲一个线程就...原创 2019-06-10 09:39:05 · 273 阅读 · 0 评论 -
Netty-10 ChannelPipeline和ChannelHandler
Netty中的ChannelPipeline和ChannelHandler机制类似于Servlet和Filter过滤器,这类拦截器实际上是责任链模式的一种变种,主要是为了方便事件的拦截和用户自定义逻辑的定义。一、ChannelPipeline(一)简单介绍ChannelPipeline是ChannelHandler的容器,它负责ChannelHandler的管理和事件拦截与调度;(二)事件...原创 2019-06-05 16:37:05 · 217 阅读 · 0 评论 -
Netty-6 Http协议支持-websocket
一、websockt简介一直以来,网络都是围绕着http协议进行开发的。然而,http会有一些固有的问题,所以websocket被引入。(一)http缺点原创 2019-06-03 09:52:25 · 512 阅读 · 0 评论 -
Netty-5 编解码技术
对于我们自己编写POJO来说,在网络传输和文件存储的时候,我们需要对POJO进行编码,在JDK中,采用了序列化进行处理。但是,JDK的序列化具有一些缺点,所以这里介绍几种比较流行的编解码技术。一、JDK序列化的缺点jdk的序列化使用起来非常简单,但是有一些缺点,如下:无法跨语言;序列化之后的字节码流太大;序列化性能较低;二、MessagePack编解码开发三、Google的pro...原创 2019-05-29 11:38:35 · 489 阅读 · 0 评论 -
Netty-9 Channel和UnSafe
一、Channel简介Channel是Netty的网络抽象类,聚合了很多的功能,包括网络读、写,客户端发起连接,主动关闭连接,链路关闭,获取通讯双方的网络地址等。也包括了Netty框架自身的一些功能,如获取该Channel的EventLoop,获取缓冲分配器ByteBufferAllocator和pipeline等等。二、Channel功能介绍以上是Channel接口提供的一些方法,很多比...原创 2019-06-05 14:32:58 · 375 阅读 · 0 评论 -
Netty-6 Http协议支持-文件服务器
上一节对Netty的HTTP支持进行了基本使用,实现了两个案例,这个章节,主要是使用Netty完成一个HTTP服务器,一、功能介绍主要完成了如下功能:在浏览器输入地址的时候,显示目录下的所有文件及目录点击目录,进入下一层目录;点击文本文件,显示内容;点击其他类型的文件,进行下载;二、服务端实现(一)主启动类其实和之前的没什么变化package com.firewolf.ja...原创 2019-05-31 10:10:42 · 479 阅读 · 0 评论 -
Netty-4 TCP粘包拆包问题
一、TCP粘包/拆包问题TCP是一个“流”协议,所谓流,也就是一串没界限的数字,在TCP底层是连接成一片的,没有界限,因为不知道业务层含义,所以只会根据TCP缓冲区的实际情况进行划分,导致在业务层来看,一个完整的包可能会被TCP拆分成多个包,也可能把多个小的包封装起来,形成一个大的包。粘包和拆包可能会出现如下情况:假设客户端发送两个数据包D1和D2给服务端,由于服务端一次读到的字节数是不固...原创 2019-05-28 11:46:39 · 770 阅读 · 0 评论 -
Netty-3 Netty入门案例及核心API
在 Java IO(BIO)、伪异步IO、NIO、NIO2(AIO)、Netty这篇文章里面,我们简单的讲解了Netty的一些优点,下面我们使用Netty完成一个简单的群聊功能,同时对Netty里面的一些核心API进行介绍。一、使用Netty开发群聊(一)Netty群聊服务端package com.firewolf.java.io.netty.server;import io.netty...原创 2019-05-28 11:48:14 · 702 阅读 · 0 评论 -
Netty-02 Java IO(BIO)、伪异步IO、NIO、NIO2(AIO)、Netty
一、传统的BIO(一)BIO介绍在基于传统同步阻塞模型开发中,ServerSocket负责绑定IP地址,启动监听端口;Socket负责发起连接操作,连接成功后,双方通过输入流和输出流进行同步组阻塞时通讯。通信模型图:通常由一个Acceptor线程负责监听客户端的连接,接收到客户端请求后为每个客户端创建一个新的线程进行链路处理,处理完后通过输出流返回数据到客户端,线程销毁。最大的问题就是...原创 2019-05-14 23:38:31 · 573 阅读 · 0 评论
分享