日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

慢聊Golang的websocket使用和實(shí)現(xiàn)代碼分析

來源: 責(zé)編: 時(shí)間:2023-12-04 09:21:08 271觀看
導(dǎo)讀本期將會(huì)繼續(xù)上次話題,上篇主要是理論還是停留在文字層面,今天帶來的是websocket實(shí)操,分享它使用和底層實(shí)現(xiàn)!相信很多使用Golang的小伙伴都知道Gorilla這個(gè)工具包,長(zhǎng)久以來gorilla/websocket 都是比官方包更好的websocket

本期將會(huì)繼續(xù)上次話題,上篇主要是理論還是停留在文字層面,今天帶來的是websocket實(shí)操,分享它使用和底層實(shí)現(xiàn)!hEb28資訊網(wǎng)——每日最新資訊28at.com

相信很多使用Golang的小伙伴都知道Gorilla這個(gè)工具包,長(zhǎng)久以來gorilla/websocket 都是比官方包更好的websocket包。hEb28資訊網(wǎng)——每日最新資訊28at.com

題外話 gorilla:大猩猩(不過這個(gè)猩猩還挺可愛的)hEb28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hEb28資訊網(wǎng)——每日最新資訊28at.com

gorilla/websocket 框架開源地址為: https://github.com/gorilla/websockethEb28資訊網(wǎng)——每日最新資訊28at.com

今天小許就用【gorilla/websocket】框架來展開本期文章內(nèi)容,文章會(huì)涉及到核心代碼的走讀,會(huì)涉及到不少代碼,需要小伙伴們保持耐心往下看,然后結(jié)合之前分享的websocket基礎(chǔ),徹底學(xué)個(gè)明白!hEb28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hEb28資訊網(wǎng)——每日最新資訊28at.com

簡(jiǎn)單使用

安裝Gorilla Websocket Go軟件包,您只需要使用即可go gethEb28資訊網(wǎng)——每日最新資訊28at.com

go get github.com/gorilla/websocket

在正式使用之前我們先簡(jiǎn)單了解下兩個(gè)數(shù)據(jù)結(jié)構(gòu) Upgrader 和 ConnhEb28資訊網(wǎng)——每日最新資訊28at.com

Upgrader

Upgrader指定用于將 HTTP 連接升級(jí)到 WebSocket 連接hEb28資訊網(wǎng)——每日最新資訊28at.com

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}
  • ? HandshakeTimeout:握手完成的持續(xù)時(shí)間
  • ? ReadBufferSize和WriteBufferSize:以字節(jié)為單位指定I/O緩沖區(qū)大小。如果緩沖區(qū)大小為零,則使用HTTP服務(wù)器分配的緩沖區(qū)
  • ? CheckOrigin :函數(shù)應(yīng)仔細(xì)驗(yàn)證請(qǐng)求來源 防止跨站點(diǎn)請(qǐng)求偽造

這里一般會(huì)設(shè)置下CheckOrigin來解決跨域問題hEb28資訊網(wǎng)——每日最新資訊28at.com

Conn

Conn類型表示W(wǎng)ebSocket連接,這個(gè)結(jié)構(gòu)體的組成包括兩部分,寫入字段(Write fields)和 讀取字段(Read fields)hEb28資訊網(wǎng)——每日最新資訊28at.com

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ú)的前端作為客戶端程序。hEb28資訊網(wǎng)——每日最新資訊28at.com

部分字段說明如下圖:hEb28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片hEb28資訊網(wǎng)——每日最新資訊28at.com

服務(wù)端示例

出于說明的目的,我們將在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

上一篇: Python Django:transactions的概念、用法及常見用例

下一篇: 玩轉(zhuǎn)Spring MVC自定義請(qǐng)求匹配規(guī)則

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 井冈山市| 深泽县| 德安县| 西藏| 瓦房店市| 靖边县| 肇州县| 武邑县| 高安市| 花莲县| 平利县| 宁波市| 岐山县| 自治县| 密云县| 德兴市| 汕尾市| 普兰店市| 治多县| 贡觉县| 安庆市| 慈利县| 静安区| 开平市| 湘潭县| 华亭县| 宜昌市| 巩义市| 万山特区| 湾仔区| 耿马| 郧西县| 日照市| 浙江省| 双鸭山市| 余姚市| 京山县| 清苑县| 咸宁市| 中卫市| 安陆市|