Netty深入浅出---实战
工作以来我所在公司项目一直都在用mina,和netty。因为mina已经不维护了,本专栏是对netty的讲解,是按照本人当初学习netty的过程重新过一遍,算是印象加深,巩固基础。有时间持续更新......
饥饿小猪
只有打好扎实的基础,才能走的更远。 zhur_jim@163.com
(微信公众号:HungryPigKing)
展开
-
【Netty专题】源码剖析netty核心基础ByteBuf
在面试的时候,当面试问到netty的时候问到:你知道jdk nio中的ByteBuffer与netty中的ByteBuf有什么区别吗?来看看面试者的基础掌握的如何!你能准确回到出来个所以然吗? 说到jdk我先说说我身边使用jdk nio的情况; 我现在公司就有个游戏项目是jdk nio2一行一行实现的通讯架构,一直在线上运营,目前该架构单服承载最高的时候达到300...原创 2019-12-23 21:02:17 · 426 阅读 · 0 评论 -
六、[ Java NIO ] ByteBuffer的不足之处总结
JDK NIO类库中提供的java.nio.Buffer,但是由于NIO编程的复杂性,ByteBuffer自然就暴露了他的局限性了:1、ByteBuffer 的API不是很丰富,很多都是要自己去封装实现一些api供自己去支持一些高级的需求。2、ByteBuffer只有一个标识位置的position,读写的时候要手工去flip,rewind,一不小心操作,很容易搞乱导致数据错乱接收。3、...原创 2019-02-14 19:42:58 · 748 阅读 · 0 评论 -
五、[ Java NIO ] server和client完整通信实践案例
服务器:我们通过调用静态open方法创建Selector对象。然后,我们还通过调用其静态open方法(特别是ServerSocketChannel实例)来创建通道。这是因为ServerSocketChannel是可选择的,并且适合于面向流的侦听套接字。然后将其绑定到我们选择的端口。记得我们前面说过,在将可选通道注册到选择器之前,必须首先将其设置为非阻塞模式。接下来我们做这个,然后把通道注...原创 2019-01-31 18:39:28 · 622 阅读 · 0 评论 -
四、[ Java NIO ] 全面解析Selector模式
一、为什么使用selector?传统的IO网络编程是,一个客户端连接到服务器端,服务器就起一个线程去维护与这个连接。对服务器开销非常大。而NIO引入的Selector模式解决了一个客户端一个线程的问题;选择器提供了一种机制,用于监视一个或多个NIO通道,并识别何时可以使用一个或多个NIO通道进行数据传输。这样,一个线程可以用于管理多个通道,从而管理多个网络连接。线程之间的上下文切换对于操作系统...原创 2019-01-31 17:01:00 · 1937 阅读 · 0 评论 -
三、[ Java NIO ] java.nio.ByteBuffer只读设置和warp(),以及HeapByteBuffer和DirectByteBuffer实现零拷贝详解
Java.nio.ByteBuffer:不管是什么类型的数据存储,最终底层处理都是ByteBuffer形式来操作。只是他们的字节长度不一样。(读写操作相关的API就不介绍)1、public abstract ByteBuffer slice(): 创建要给新的byteBuffer 。与其说是新的byteBuffer,不如说是一个新的引用,是从原有的ByteBuffer中截取一段,自定义...原创 2019-01-27 18:52:36 · 1386 阅读 · 0 评论 -
二、[ Java NIO ] NIO与IO对比,并深入详解NIO核心属性状态
NIO的介绍:(1)、java.io中最为核心的一个概念是流(stream) ,面向流的编程。(2)、Java中,一个流要么是输入流,要么是输出流,不可能同时既是输入流又是输出流。(3)、java.nio中拥有3个核心概念: selector,Channel与Buffer。关系如下:(4)、在java.nio中,我们是面向块(block)或是缓冲区(buffer)编程的。...原创 2019-01-27 13:01:04 · 470 阅读 · 0 评论 -
一、[ Java IO ] 设计原理之装饰者模式(对比继承)
一、Java/IO库的设计原则:1、Java的1O库提供了一个称做链接的机制,可以将一个流与另一个流首尾相接,形成一个流管道的链接。这种机制实际上是一种被称为Decorator(装饰)设计模式的应用。2、通过流的链接,可以动态的增加流的功能,而这种功能的增加是通过组合一些流的基本功能而动态获取的。我们要获取一个1/O对象,往往需要产生多个/O对象,这也是Java 1/0库不太容易掌握的原因...原创 2019-01-26 11:41:17 · 358 阅读 · 0 评论 -
五、通过Protobuf集成Netty实现对协议消息客户端与服务器通信实战
目录一、Protocol Buffers 是什么?二、Protocol Buffers 文件和消息详解三、项目实战,直接掌握的protobuf应用。一、Protocol Buffers 是什么? 1、官网翻译之后如下: Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很...原创 2018-10-14 23:13:41 · 1275 阅读 · 7 评论 -
io.netty.channel.DefaultChannelPipeline onUnhandledInboundException
九月 19, 2018 9:59:01 下午 io.netty.channel.DefaultChannelPipeline onUnhandledInboundException警告: An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the la...原创 2018-09-19 22:04:31 · 14702 阅读 · 1 评论 -
一、Netty执行流程和回调机制实战
netty的执行流程机制,我们先通过代码案例直接熟悉上手,后面然后拆开分别详细深入剖析,及相关核心代码的源码解析;我们使用gradle:compile group: 'io.netty', name: 'netty-all', version: '4.1.29.Final'package com.zhurong.netty.test1;import io.netty.boo...原创 2018-09-19 22:58:14 · 1004 阅读 · 0 评论 -
二、Netty实现服务器与客户端完整交互连接实战
本节内容是代码实现服务器与客户端完整连接过程。整体把控netty的工作流程。我们先不要被某个类,某个api的封装深入挖掘,这样你会踩很多坑,陷入进去而拔不出来,后面我会一一讲解,源码剖析工作原理。这就是我个人学习技术的一种方法,深入浅出,慢慢彻底熟悉netty。我们先学会用,然后把它切分若干块,慢慢吞噬。代码实现:详细:package com.zhurong.ne...原创 2018-09-23 23:11:37 · 3298 阅读 · 3 评论 -
三、Netty服务器与多客户连接利用广播方式完全理解netty的读写机制
本篇采用的编解码是netty自带的字符串的格式的编解码,用户1可以控制台发消息(输入完消息要加换行符号,是一个消息结束的分隔符,后面我会在编解码中详细讲解)给服务器,服务器广播给其他所有的客户端,这个机制,我们游戏开发服务器中应用很普遍,游戏中的广播,游戏中你看到其他玩家在操作。。。都是利用这个广播机制。案例如下:package com.zhurong.netty.te...原创 2018-09-24 08:27:11 · 3335 阅读 · 6 评论 -
四、Netty实现webSocket,实现服务器与浏览器(HTML)在线聊天功能
由于http协议有一个缺陷:通信只能由客户端发起。如果服务器有连续的状态变化,客户端要获知只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。而websocket就这样应用而生。 浏览器与服务器之间的长连接,是websocket的支持。WebSocket是一种在单...原创 2018-09-24 14:54:30 · 2865 阅读 · 5 评论