Netty实战

1、课程背景

现在的互联网环境下,分布式系统大行其道,而分布式系统的根基于网络编程,而netty恰恰是java领域编程的王者。如果要致力于开发高性能的服务器程序,高性能的客户端程序,必须掌握netty,而本课程就是带领你进入基于netty的网络编程世界。

2、课程概述

本课程从基础nio编程开如,从netty入门到进创,参数优化到源码分析,由浅入深,为netty学习打下坚实基础。本课程的目标带你netty入门,理解基本原理和高效原因,并具务一定的netty编码能力。

3、主要内容

第一部分NIO编程,会详细讲解nio的Selector,bytebuffer,channel三大组件,建议即便之前有nio基础的同学也不错这一部分的学习。

第二部分进入netty入门学习,会介绍eventLoop,channel,future,pipline,handler,bytebuffer等重要组件。

第三部分是netty进阶学习,会介绍粘包半包的解决方法,协议的设计,序列化知识,使用聊天室案例将这些知识点串起来,为了大家专注学习netty编程,并没有引入第三方的框架,如spring,websocket等,免得分散注意力。

第四部分netty常见参数的学习及优化。

第五部分是源码分析,这里的源码分析侧重netty的服务启动,建立连接,读取数据,eventLoop处理事件的流程,不牵扯更多的源码。

NIO基础:non blocking io非阻塞性IO

1、三大组件

channel&buffer

channel有一点类似于Stream,它就是读写数据的双向通道,可以从channel将数据读入buffer,也可以将buffer的数据写入channel,而之前的Stream要么是输入,要么是输出,channel比stream更为底层。

常见的channel有

filechannel  : 文件的channel 

datagramchannel :udpchannel

socketchannel:tcpchannel

serversocketchannel:socketchannel 

buffer则用来缓冲读写数据,常见的buffer有

Bytebuffer

        mappedByteBuffer

        DirectByteBuffer

        HeapByteBuffer

ShortBuffer 

IntBuffer

LongBuffer

FloatBuffer

DoubleBuffer

CharBuffer

1.2Selector

selector单从字面意思不好理解,需要结合服务器的设计演化来理解它的用途。

多线程设计:

多线程的缺点:

内存占用高

线程上下文切换成本高

只适合连接少的场景

线程池版设计:

线程池的缺点

阻塞模式下,线程仅能处理一个socket连接

仅适合短连接场景。

selector版本设计

select版本作用就是配合一个线程来管理多个channel,获取这些channel上发生的事件,这些channel工作在非阻塞模式下,不会让线程死在一个Channel上,适合连接数特别多,但流量多的场景。

调用selector的Select会阻塞到channel发生读写就绪的事件,这些事件发生select方法就会返回这些事件交给thread来处理。

2.2ByteBuffer结构:

byteBuffer有以下属性

capacity ---容量

position -- 读写指针

limit--读写限制

一开始 

position   limit写入限制  capacity容量 

写模式,position是写入位置,limit等于容量,下图表示写入4个字节后的状态。

 当发生flip的时候,positon切换为读取位置,limit切换为读取限制。

 读取4个字节后,状态

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值