Netty 快速入门系列
文章平均质量分 79
Netty 快速入门系列
netcobol
这个作者很懒,什么都没留下…
展开
-
Netty 快速入门系列 - Chapter 1 传统OIO与NIO - 传统OIO 【第一讲】
Chapter1 章节结构 1. 传统IO 特点 IO阻塞package com.john.netty.learn.ch01.oio;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.handler;import java.io.BufferedReader;import java....原创 2018-03-25 17:00:59 · 818 阅读 · 1 评论 -
Netty 快速入门系列 - Chapter 1 传统OIO与NIO - NIO 【第二讲】
Chapter1 章节结构NIO 特点 OIO 比较ServerSocketChannel --> ServerSocketSocketChannel --> SocketSelector (多路复用)SelectionKey特点:一个服务员服务多个客户,主要通过Selector多路服务代...原创 2018-03-25 17:08:18 · 455 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 2 Netty3.x 【第三讲】Hello
Chapter2 章节结构1. Netty版本大致版本分为 netty3.x 和 netty4.x、netty5.x2. 应用范围1. 分布式进程通信例如: hadoop、dubbo、akka等具有分布式功能的框架,底层RPC通信都是基于netty实现的,这些框架使用的版本通常都还在用netty3.x2. 游戏服务器开发最新的游戏服务器有部分公司可能已经开始采用netty4.x 或 nett...原创 2018-03-25 17:17:34 · 458 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 2 Netty3.x 【第四讲】 - 基本原理
Chapter2 章节结构原理概念图: 1. Boss 作为一个大门的人员,由于注册Socket Accept 的事件,即是否有客人进入餐厅2. 如果有客人进入餐厅, Boss 将轮训从多个区中跳出一个Nio Worker, 让worker 完成 注册NIO selector 的 IO read 事件。 代码:1. NioSelectorFactoryPool 用于注册有个Boss 和 Worke...原创 2018-03-25 17:37:57 · 312 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 2 Netty3.x 【第五讲】 - 源码讲解
Netty3.X 源码: https://download.csdn.net/download/netcobol/10309152Netty3.X 源码讲解 ServerBootstrap.bind(new InetSocketAddress(port)) bind 将调用ServerBootstrap.bindAsync 方法,完成初始化 nio ServerSocketChannel...原创 2018-03-25 17:45:23 · 391 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 3 Netty5.x【第六讲】 -Netty5 案例
Netty5 案例 Server端package com.john.netty.learn.ch05;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.Channel;import io.netty.channel.ChannelFuture;import io.netty.channel.Channel...原创 2018-03-25 17:55:45 · 250 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 3 Netty5.x【第七讲】 - Channel线程安全?
Channel线程安全,可以共享使用吗? 首先我们讲解线程池的概念1. 线程池:通过一个线程Queue (保存多个Runnable Task) 和 启动多个Thread 完成并发任务处理。如果Task Queue 中有任务, 加入Thread 中处理任务, 如果TaskQueue 任务已经全部处理, 所有Thread 进入堵塞。为什么使用Task Queue ? 由于Thread 是一个系统比...原创 2018-03-25 18:29:58 · 4984 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 3 Netty5.x【第八讲】 - Client 重连
如何实现Netty Client重连?Netty5Client: 如果建立连接失败,Call notifyReconnection 启动 connect 重连,notify 启动 run 方法,检测重连。使用CAS 避免重复Notify。如果连接成功, condition.await() 进入等待。package com.john.netty.learn.ch05;import java.i...原创 2018-03-25 18:58:30 · 253 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 3 Netty5.x【第九讲】 - 单客户多Client 重连
MultipleNetty5Client :学习getFirstChannel 通过递归,获取一个可用Channel public Channel nextChannel() throws InterruptedException { return getFirstChannel(0); } private Channel getFirstChannel(int tryCount) t...原创 2018-03-25 19:32:35 · 234 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 4 Netty心跳【第十讲】 - IdleStateHandler学习
IdleStateHandler 心跳作用:心跳其实就是一个普通的请求,特点数据简单,业务也简单心跳对于服务端来说,定时清除闲置会话inactive(netty5)、 channelclose(netty3)心跳对客户端来说,用来检测会话是否断开,是否重连! 用来检测网络延时!代码案例Netty3.X channelPipeline.addLast("Idle", new IdleStateHan...原创 2018-03-25 19:40:04 · 1245 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 5 Netty之序列化【第十一讲】 Protocol buff
1. 序列化及反序列化协议Protocol buff: protocol buff是一种协议,是谷歌推出的一种序列化协议Java序列化协议也是一种协议2. Protocol buff 2.4 版本PBPlay.protooption java_package = "com.john.netty.learn.ch07.proto";option java_outer_classname= "Pl...原创 2018-03-25 19:54:03 · 301 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 5 Netty之序列化【第十二讲】 Java Serializable
Java 版本序列化Playerpackage com.john.netty.learn.ch07.java;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Player implements java.io.Serializable { /** *...原创 2018-03-26 08:22:35 · 321 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 6 自定义数据协议【第十三讲】 通过大端序列方法将4个字节int转成 byte数组
第一种方法: 通过大端序列方法将4个字节int转成 byte数组大端序列方法:int2bytes:将int 从高到低位分别保存到 byte[0] ~ byte[3] byte[] bytes = new byte[4]; for (int i = 0; i < bytes.length; i++) { bytes[i] = (byte) ((val >>...原创 2018-03-26 08:42:48 · 936 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 6 自定义数据协议【第十四讲】ByteBuffer 和 ChannelBuffers
ByteBuffer: 通过ByteBuffer 完成数据序列化,但是ByteBuffer.allocate(N) 必须提前设置ByteBuffer容量,无法扩容public static void main(String[] args) throws IOException { int id = 123456789; int age = 21; //无法扩容 ByteBuf...原创 2018-03-26 08:46:52 · 682 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 6 自定义数据协议【第十五讲】自定义方法Serializer
如何自定义方法Serializer完成 String、List、Map等动态数据序列化呢?Serializer 接口 package com.john.netty.learn.ch08.core;import org.jboss.netty.buffer.ChannelBuffer;public interface Serializer { public void writeToBuffer(Ch...原创 2018-03-26 09:21:19 · 357 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 7 数据包协议【第十六讲】数据传输问题
1. 粘包现象give me a coffeegive me a tea2. 分包现象、give mea tea give me a coffee3. 出现原因没有一个稳定数据结构,无法确定数据包大小,无法正确解析数据包4. 案例说明同时Send 三次:粘包出现所有源码下载 :https://download.csdn.net/download/netcobol/10308871...原创 2018-03-26 09:32:13 · 224 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 7 数据包协议【第十七讲】解决方案- 分割符 及 长度+数据
分割符法:可以支持Socket攻击通过分隔符完成数据包解析,缺点:效率不高,需要一个字节一个字节的查找分隔符 (大家一定要理解,数据传输结果是byte字节流,分隔符需要一个字节一个字节的查找)give me a coffee|give me a tea|give me a coffee|give me a tea|长度&数据法 (类似:String序列化&反序列化) 但无法支持So...原创 2018-03-26 09:46:37 · 200 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 7 数据包协议【第十八讲】解决方案-经典协议包结构
通过定义经典数据包结构: * +——----——+——-----——+——----——+——----——+——-----——+ * | 包头 | 模块号 | 命令号 | 长度 | 数据 | * +——----——+——-----——+——----——+——----——+——-----——+包头:4个字节 -- Int模块号: 2个字节 -- short命令号: 2个字节 --short...原创 2018-03-26 10:44:45 · 262 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 7 数据包协议【第十九讲】解决方案-粘包分包原理
1. 消息如何在管道中流转当前的一个handler如何往下面的一个handler传递一个对象一个管道中会有多个handler,其中handler往下传递对象的方法是sendUpstream(event)源码讲解:NioWorker read 方法用于 读取Nio byte数据 final ChannelBuffer buffer = bufferFactory.getBuffer(readByt...原创 2018-03-26 11:33:20 · 217 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 8 数据包协议【第二十讲】解决方案-Pipeline用例代码
Server 端Upstream1ChannelHandler: ChannelBuffer 转换成 String ,通过 sendUpstream 让next handler 处理。ChannelBuffer channelBuffer = (ChannelBuffer) e.getMessage();String message = new String(channelBuffer.arra...原创 2018-03-26 13:01:06 · 244 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 8 数据包协议【第二十一讲】FrameDecoder 讲解
FrameDecoderpublic abstract class FrameDecoder extends SimpleChannelUpstreamHandler implements LifeCycleAwareChannelHandler { public static final int DEFAULT_MAX_COMPOSITEBUFFER_COMPONENTS = 1024...原创 2018-03-26 13:39:43 · 451 阅读 · 0 评论 -
Netty 快速入门系列 - Chapter 8 数据包协议【第二十二讲】Socket攻击及防护
1. Socket攻击把长度定义的很大,这种数据包,通常被称为socket攻击,字节流式攻击,导致服务器OOM。由于:FrameDecoder里面的cumulation其实就是一个缓存的buffer对象 ,导致OOM2. 防止Socket攻击通过设置字节流Max大小,防止Socket攻击。分析 Decoder 假设 Bytes_Max = 2048 a. 字节流大于Max,跳过所有字节流 //...原创 2018-03-27 08:18:06 · 842 阅读 · 0 评论