Netty

一、Netty基础

1、Netty架构


Netty三大组件:缓冲(buffer),通道(channel),事件模型(event model

2、Netty实现异步的两个方法

 1)、回调 

Netty JavaScript Node.js都使用了很多回调方法

 2)、Futures

一个Future要么获得计算完的结果,要么获得计算失败后的异常。Javajava.util.concurrent包中附带了Future接口,它使用Executor异步执行。

3.Netty的聚合

   


4.Netty应用场景

 1)分布式进程通信

例如: hadoop、dubbo、akka等具有分布式功能的框架,底层RPC通信都是基于netty实现的

 2)游戏服务器开发
最新的游戏服务器有部分公司可能已经开始采用netty4.x 或 netty5.x


二、

1.NIO框架通信模式

 1)线程模型方面的改变,一个线程维护一个客户端的线程模型变成了一个线程维护一个多路复用注册器,或多客户端过来之后客户端直接注册到多路复用注册器,一个线程在多路复用注册器上面轮询,然后获取一个事件KEY集合,然后在做业务处理

 2)高速双向通道Channel,其实底层是封装SOCKET,但是这个读写/且能完成读写共存状态,都可以通过Channel完成,减少服务器开销,高速封装

 3)byteBuffer:字节缓存

2.Netty框架(基于NIO框架封装)

 第一:以为Reactor线程模型,会根据启动参数来决定最佳的线程调度方式。

    主要使用于客户端连接,用于业务处理

 第二:引入变种责任链,

   Channel对应管道,它会将实际处理业务类编织起来,序列 双向链表形式 next pre 精细控制处理流程

 第三:业务分离 调度和实际处理分离


三、源码剖析

boss:派发任务,客人给worker 
worker线程:每个worker有8个,处理SockerChannel的连接事件,read/write等
Thread.start()子线程就绪
thread.run()主线程
轮询selector事件,事件有4种
NioWorker
task.run();
RPC框架:Dubbo ZooKeeper ElasticSearch
1.编解码
2.序列化协议 Protobuf协议
3.Netty心跳,粘包分包socket攻击
粘包:多个请求合成一个
分包:1个请求分成多个

序列化协议:对象序列化成二进制数组
数据包=包头+模块号+命令号+长度+数据
java对象
int,long,String
int 20
大端序列:先写高位
小端序列:
ObjectOutputStream 效率很低,因为:类名 类的描述 属性 数据长度 数据本身
ObjectInputStream



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值