首页 > 解决方案 > 尝试使用 gorilla 库连接到 websocket 时出现运行时错误

问题描述

我正在使用 Gorilla Websocket 但是我收到此错误,它发生在尝试从 localhost 访问 websocket 页面后

尝试访问页面时还会给出 ERR_EMPTY_RESPONSE

如果需要更多信息,请告诉我,因为这是我第一次发帖:)

错误

2019/12/11 16:41:35 Client Connected...
2019/12/11 16:41:35 http: panic serving [::1]:37714: runtime error: invalid memory address or nil pointer dereference
goroutine 4 [running]:
net/http.(*conn).serve.func1(0xc420018820)
        /opt/go/src/net/http/server.go:1721 +0xd0
panic(0x65f180, 0x7e3280)
        /opt/go/src/runtime/panic.go:489 +0x2cf
github.com/gorilla/websocket.(*Conn).NextReader(0x0, 0xc42008a0f0, 0xc42001a6c0, 0x28, 0x40, 0x28)
        /opt/gopkg/src/github.com/gorilla/websocket/conn.go:971 +0x26
github.com/gorilla/websocket.(*Conn).ReadMessage(0x0, 0xc4200c2680, 0x14, 0x28, 0x40, 0x7ecca0, 0x14)
        /opt/gopkg/src/github.com/gorilla/websocket/conn.go:1064 +0x2f
main.reader(0x0)
        /home/go/api/main2.go:23 +0x40
main.wsEndpoint(0x7c0ec0, 0xc4200e4000, 0xc42000a800)
        /home/go/api/main2.go:45 +0xeb

去代码

var upgrader = websocket.Upgrader{
    ReadBufferSize: 1024,
    WriteBufferSize: 1024,
    CheckOrigin: func(r *http.Request) bool { return true },
}

func homePage(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Home Page")
}

func reader(conn *websocket.Conn) {
    for {
        messageType, p, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            return
        }
        log.Println(string(p))

        if err := conn.WriteMessage(messageType, p); err != nil {
            log.Println(err)
        }
    }
}

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

    ws, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
    }

    log.Println("Client Connected...")

    reader(ws)

}

func setupRoutes() {
    http.HandleFunc("/", homePage)
    http.HandleFunc("/ws", wsEndpoint)
}

func main() {
    fmt.Println("Websocket server started")
    setupRoutes()
    log.Fatal(http.ListenAndServe(":8080", nil))
}

标签: gowebsocketgorilla

解决方案


推荐阅读