基於netty的web socket小記

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服務器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章