前言
目前市场最常用的WebSocket通信大多都是基于NIO的,并且更多的是基于Netty框架上进行信息交互实现的。先大致了解下NIO与Netty的知识点,然后快速进行服务端与客户端的WebSocket通讯实现。
Netty入门
原生NIO的缺陷
类库和API繁杂
入门门槛高
工作量和难度大
JDK NIO依然存在Bug
Netty的优势
API简单
入门门槛低
性能高
成熟、稳定
WebSocket入门
什么是WebSocket?
H5协议规范
握手机制
解决客户端和服务端实时通信产生的技术
WebSocket的优点
节省通信开销
服务器主动传送数据给客户端
实时通信
WebSocket建立连接
客户端发送握手请求
服务端响应请求
连接建立
WebSocket生命周期
打开事件
消息事件
错误事件
关闭事件
WebSocket关闭连接
服务器关闭底层TCP连接
客户端发起TCP Close
实战
以最基本简单的方式来演示WebSocket的入门,只需要JDK7以上和Netty核心包即可。那么先写个客户吧,也就四个文件即可,然后再写客户端,就用html+js吧,一个文件即可。
1.依赖包
IDE新建Maven工程(Grandle也一样),在pom.xml添加Netty包,这里使用最新的Netty 5.0.0.Alpha2
<dependencies> <dependency> <groupId>io.nettygroupId> <artifactId>netty-allartifactId> <version>5.0.0.Alpha2version> dependency> dependencies>
2.Netty配置
在主工程目录下新建NettyConfig类,ws通讯会基于channel来交互的,因此我们需要创建一个自己使用的channel实例,
import io.netty.channel.group.ChannelGroup;import io.netty.channel.group.DefaultChannelGroup;import io.netty.util.concurrent.GlobalEventExecutor;public class NettyConfig {
/** * store group channel */ public static ChannelGroup group = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);}