本期將會(huì)繼續(xù)上次話題,上篇主要是理論還是停留在文字層面,今天帶來的是websocket實(shí)操,分享它使用和底層實(shí)現(xiàn)!
相信很多使用Golang的小伙伴都知道Gorilla這個(gè)工具包,長(zhǎng)久以來gorilla/websocket 都是比官方包更好的websocket包。
題外話 gorilla:大猩猩(不過這個(gè)猩猩還挺可愛的)
圖片
gorilla/websocket 框架開源地址為: https://github.com/gorilla/websocket
今天小許就用【gorilla/websocket】框架來展開本期文章內(nèi)容,文章會(huì)涉及到核心代碼的走讀,會(huì)涉及到不少代碼,需要小伙伴們保持耐心往下看,然后結(jié)合之前分享的websocket基礎(chǔ),徹底學(xué)個(gè)明白!
圖片
安裝Gorilla Websocket Go軟件包,您只需要使用即可go get
go get github.com/gorilla/websocket
在正式使用之前我們先簡(jiǎn)單了解下兩個(gè)數(shù)據(jù)結(jié)構(gòu) Upgrader 和 Conn
Upgrader指定用于將 HTTP 連接升級(jí)到 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}
這里一般會(huì)設(shè)置下CheckOrigin來解決跨域問題
Conn類型表示W(wǎng)ebSocket連接,這個(gè)結(jié)構(gòu)體的組成包括兩部分,寫入字段(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作為客戶端還是服務(wù)端,也就是說說gorilla/websocket中同時(shí)編寫客戶端程序和服務(wù)器程序,但是一般是Web應(yīng)用程序使用單獨(dú)的前端作為客戶端程序。
部分字段說明如下圖:
圖片
出于說明的目的,我們將在Go中同時(shí)編寫客戶端程序和服務(wù)端程序(其實(shí)小許是前端小趴菜
本文鏈接:http://www.www897cc.com/showinfo-26-37263-0.html慢聊Golang的websocket使用和實(shí)現(xiàn)代碼分析
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com