netty 学习笔记

                                                       netty 介绍

一 Netty 是什么


Netty 是一个广泛使用的 Java 网络编程框架
而Netty就是基于Java NIO技术封装的一套框架
一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持

二 Netty 组成部分
1 Channel  
NIO 基本结构,它代表了一个用于连接到实体如硬件设备、文件、网络套接字活程序组件,能够执行一个活多个不同的I/O 操作(例如读和写)的开放连接
可以把  Channe 想象成一个可以 、打开 、关闭 、连接、断开 、传入、传出 数据的运输工具

2 Callback
callback(回调)是一个简单的方法,提供给另一种方法作为引用,这个后者就可以在某个合适的时间调用前者
Netty 内部使用回调处理事件时,一旦这样的回调被触发,事件可以有接口ChannelHandler的实现来处理

3 Futre
Futre 提供了另一种在操作完成时通知应用程序的方式 。这个对象可以看作是一个异步操作的结果的占位符;它将在未来的某个时刻完成,并提供对其结果的访问

4事件和 ChannelHandler
Netty 使用不同的事件来通知我们状态的改变或者是操作的状态。这使得我们能够基于已经
发生的事件来触发适当的动作。这些动作可能是:
记录日志;
数据转换;
流控制;
应用程序逻辑
传统的I/o是阻塞的
Java 用 Selector 实现非阻塞IO
使用了事件通知API以确定在一组非阻塞套接字中有那些已经能够进行IO相关的操作

netty 解决TCP粘包和拆包问题

三  什么时粘包和拆包 
首先TCP是一个"流"协议,犹如河中水一样连成一片,没有严格的分界线。当我们在发送数据的时候就会出现多发送与少发送问题,也就是TCP粘包与拆包。得不到我们想要的效果。
所谓粘包:当你把A,B两个数据从甲发送到乙,本想A与B单独发送,但是你却把AB一起发送了,此时AB粘在一起,就是粘包了
所谓拆包: 如果发送数据的时候,你把A、B拆成了几份发,就是拆包了。当然数据不是你主动拆的,是TCP流自动拆的

 解决办法
(1)消息定长,比如把报文消息固定为500字节,不够用空格补位
(2)在包尾增加回车换行符进行分割,例如FTP协议
(3)将消息分为消息头和消息体,消息头中包含表示消息总长度的字段
 (4) 更复杂的应用层协议

 

 新建maven项目  pom.xml 引入netty相关依赖

 <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>5.0.0.Alpha1</version>
        </dependency>
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值