Netty入门之WebSocket
学好Netty,打通网络编程
什么是Netty
高性能、事件驱动、异步非阻塞的IO Java开源框架
基于NIO的客户端,服务端编程框架
非常可靠的稳定性和伸缩性
Netty使用场景
高性能领域:游戏、大数据、分布式计算
多线程并发领域:多线程模型、主从多线程模型
异步通信领域:异步非阻塞,主动获取或通过通知机制来得到结果
BIO通信
一个线程负责连接,一请求一应答,缺乏弹性伸缩能力
BIO通信模型
伪异步IO通信
线程池负责连接,M请求N应答,线程池阻塞
伪异步IO通信模型
NIO通信
缓冲区Buffer,通道Channel,多路复用器Selector
AIO通信
连接注册读写事件和回调函数,读写方法异步,主动通知程序
四种IO对比
原生NIO的缺陷
类库和API繁杂,入门门槛高,工作量和难度大,JDK NIO存在BUG
Netty的优势
API使用简单,定制能力强,可以通过ChannelHandler对框架进行灵活的扩展
入门门槛低,功能强大,预制了多种编解码功能,支持多种主流协议
性能高,通过与其他的业界主流的NIO框架对比,Netty的综合性能最优
Netty比较成熟稳定,Netty修复了JDK NIO所有发现的BUG
什么是WebSocket
H5协议规范:H5提出的协议规范
握手机制:使客户端与服务器能够建立类似TCP的连接,方便通信
解决客户端与服务端实时通信而产生的技术:基于TCP的协议
1.websocket本质上是基于http的协议,通过http/https协议发起一条特殊的请求(握手)
2.进行握手后创建了一个进行交换数据的tcp连接,然后客户端和服务端通过tcp连接进行实时通信当
websocket客户端和服务器端通信了以后,此时就不需要之前进行请求的http协议的参与
WebSocket的优点
节省通信开销:以前使用轮询,开销较大
服务器主动传送数据给客户端:任意时刻,相互传送数据
实时通信:可以彼此相互推送信息
WebSocket建立连接
客户端发起握手请求,服务器响应请求,连接建立
WebSocket生命周期
打开事件:发生新的连接时调用、在端点上建立连接时且在任何事件之前
消息事件:接收WebSocket对话中,另一端发送的消息
错误事件:在进行连接或端点发生错误时产生
关闭事件:表示WebSocket端点的连接关闭
WebSocket关闭连接
服务器关闭底层TCP连接,客户端发起TCP Close
基于Netty实现WebSocket通信案例
功能介绍
Netty开发服务端,Html实现客户端,实现服务端与客户端的实时交互