亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Gorilla/Mux 和 Websocket 競爭條件。這樣安全嗎?

Gorilla/Mux 和 Websocket 競爭條件。這樣安全嗎?

Go
尚方寶劍之說 2022-11-23 10:23:41
我正在開發一個 websocket,最近開始使用race. go run -race serve.go得到這個結果:WARNING: DATA RACEWrite at 0x0000019ab4a8 by goroutine 95:  go-api/client.ServeWs()Previous write at 0x0000019ab4a8 by goroutine 117:  go-api/client.ServeWs()我正在使用gorilla/mux并將其中一個請求升級到 websockets。我不確定它是否是由其他原因引起的,但即使是這個非常簡單的設置仍然顯示出競爭條件。我的猜測是因為websocket同時被兩個例程寫入,但只要兩個請求都升級了,這有關系嗎?或者是否有可能由于競爭條件而斷開連接?    //serve.go    mux.HandleFunc("/data", func(w http.ResponseWriter, r *http.Request) {        client.ServeWs(w, r)    })//client.gofunc ServeWs(w http.ResponseWriter, r *http.Request) {    upgrader = websocket.Upgrader{        ReadBufferSize:  1024,        WriteBufferSize: 1024,        CheckOrigin: func(r *http.Request) bool {            return true        },    }    _, err := upgrader.Upgrade(w, r, nil)    if err != nil {        log.Println(err)        return    }}
查看完整描述

1 回答

?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

因為升級器不依賴于請求,所以可以在包級別創建升級器


var upgrader = websocket.Upgrader{ ... fields as in ServeWs ... }

并從 ServeWs 中刪除對升級程序的分配。


func ServeWs(w http.ResponseWriter, r *http.Request) {

    c, err := upgrader.Upgrade(w, r, nil)

    if err != nil {

        log.Println(err)

        return

    }

    defer c.Close()


查看完整回答
反對 回復 2022-11-23
  • 1 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號