1、WebSocketProtocolHandler里面包含了handshake过程,并且会在handshake完成之后产生一个用户事件往后面的管道传递,可以通过该事件判断web socket是否建立成功。ping、pong心跳帧已经在该handler中处理,管道后面的handler可以不用处理。
2、在web socket服务器开发的时候,会用到http codec相关的handler,这些handler会在web socket协议升级完成之后,从channel的pipeline中移除。
3、关于WebTextFrame、WebBinaryFrame、WebCloseFrame、ContinueWebSocketFrame,这几种帧都继承与WebSocketFrame,这几种帧的区别在上一篇web socket小记中讲到,web socket有一个分片的机制,并且对为什么需要分片进行了简单的介绍,所以在这里主要讲解分片机制在netty中使用,至于具体的实现后续会进行更加深入的讲解(使用web socket和一般的服务器的socket的好处是,web socket自身包含了分配的机制,而且在netty中已经实现,所有用户可以不用自己编写分包的操作,即使基于socket的应用netty自身也提供了一些简单的分包机制,但是大部分的情况下是需要自己编写的):
WebTextFrame:该帧是一个完整的字符串帧,也就是说是一个有应用意义的字符串,比如在基于json协议的web socket服务器中,一个完整的json应用层的协议可以封装在一个WebTextFrame帧中,这样在服务器中收到的一个帧就是一个完整的json应用层的协议了,而不用自己进行分包的操作(PS:TCP/IP的netty的应用,一般都是需要自己编写分包的handler,但是netty自身提供了一些常用的分包的handler,也是可以使用的,但是对于很多复杂的应用来说基本上是需要自己重写的)
WebBinaryFrame:顾名思义,该帧包含了一个具有应用意义的协议帧,该帧中包含的数据是二进制的字节流(PS:其实不论是TextFrame还是BinaryFrame,在netty中都是buffer的字节数组,只是TextFrame使用了String的函数将buffer字节数组转换成了字符串而已)
WebCloseFrame:该帧是一个web socket的关闭帧,该帧中包含了web socket关闭的code和detail信息。
ContinueWebSocketFrame:这个帧是基于分片的延续数据帧,在上面我们说到了web socket具有分片的机制,但是netty已经帮我们做了分片组装的过程,分片组装后的帧仍然是前面的WebTextFrame和WebBinaryFrame两种,但是在netty中已经帮我们做了简单的分片组装处理,只需要在WebSocketServerProtocolHandler后面添加WebSocketFrameAggregator即可。
本节就介绍到这里,后面会层层递进,首先介绍netty web socket的首先,然后再介绍如何实现一个高性能的web socket服务器。