go - 尝试使用 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))
}
解决方案
推荐阅读
- feathersjs - 检查用户是否在 Feathers 钩子中通过身份验证而不引发错误的最简单方法是什么?
- sql-server - Docker 容器无法在 M1 mac 上启动
- qt-creator - 如何在 QtCreator 项目中添加子文件夹?
- r - [[base R]] 有两个图形设备同时打开,并在两者之间翻转
- reactjs - 做出反应。如何使用状态实现功能?
- php - PHP 8 中处理 UTF-8 和 Unicode 的最佳实践
- jquery - jQuery:将选择选项列表转换为复选框列表而不使用多个?
- python - 有没有办法让十字形的所有边缘都弯曲?
- javascript - 使用 onClick 从列表中删除单个项目
- android - 在后台使用应用程序时使用导航组件时从通知导航