本期將會繼續(xù)上次話題,上篇主要是理論還是停留在文字層面,今天帶來的是websocket實操,分享它使用和底層實現(xiàn)!
相信很多使用Golang的小伙伴都知道Gorilla這個工具包,長久以來gorilla/websocket 都是比官方包更好的websocket包。
題外話 gorilla:大猩猩(不過這個猩猩還挺可愛的)
圖片
gorilla/websocket 框架開源地址為: https://github.com/gorilla/websocket
今天小許就用【gorilla/websocket】框架來展開本期文章內容,文章會涉及到核心代碼的走讀,會涉及到不少代碼,需要小伙伴們保持耐心往下看,然后結合之前分享的websocket基礎,徹底學個明白!
圖片
安裝Gorilla Websocket Go軟件包,您只需要使用即可go get
go get github.com/gorilla/websocket
在正式使用之前我們先簡單了解下兩個數(shù)據(jù)結構 Upgrader 和 Conn
Upgrader指定用于將 HTTP 連接升級到 WebSocket 連接
type Upgrader struct { HandshakeTimeout time.Duration ReadBufferSize, WriteBufferSize int WriteBufferPool BufferPool Subprotocols []string Error func(w http.ResponseWriter, r *http.Request, status int, reason error) CheckOrigin func(r *http.Request) bool EnableCompression bool}
這里一般會設置下CheckOrigin來解決跨域問題
Conn類型表示W(wǎng)ebSocket連接,這個結構體的組成包括兩部分,寫入字段(Write fields)和 讀取字段(Read fields)
type Conn struct { conn net.Conn isServer bool ... // Write fields writeBuf []byte writePool BufferPool writeBufSize int writer io.WriteCloser isWriting bool ... // Read fields readRemaining int64 readFinal bool readLength int64 messageReader *messageReader ...}
isServer :字段來區(qū)分我們是否用Conn作為客戶端還是服務端,也就是說說gorilla/websocket中同時編寫客戶端程序和服務器程序,但是一般是Web應用程序使用單獨的前端作為客戶端程序。
部分字段說明如下圖:
圖片
出于說明的目的,我們將在Go中同時編寫客戶端程序和服務端程序(其實小許是前端小趴菜
本文鏈接:http://www.tebozhan.com/showinfo-26-37263-0.html慢聊Golang的websocket使用和實現(xiàn)代碼分析
聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com