我正在嘗試在我的 go-swagger API 中提供聊天 Websocket。我正在使用這個例子:https ://github.com/gorilla/websocket/tree/master/examples/chat我嘗試在服務(wù)器啟動時將其附加到 http,但進(jìn)一步閱讀后我發(fā)現(xiàn)這是行不通的:func configureServer(s *http.Server, scheme, addr string) { hub := chat.NewHub() go hub.Run() http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) { chat.ServeWs(hub, w, r) })}然后我嘗試使用自定義服務(wù)器并將 server.Serve() 更改為:hub := chat.NewHub()go hub.Run()http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) { chat.ServeWs(hub, w, r)})if err := http.ListenAndServe(":8080", api.Serve(nil)); err != nil { log.Fatalln(err)}但也意識到為什么這行不通。WebSocket 握手期間出錯:意外的響應(yīng)代碼:404經(jīng)過一番閱讀后,我開始理解為什么從未找到 /ws:hub := chat.NewHub()go hub.Run()mux := http.NewServeMux()mux.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) { chat.ServeWs(hub, w, r)})server.SetHandler(mux)if err := server.Serve(); err != nil { log.Fatalln(err)}現(xiàn)在 websockets 可以工作,但其余 api 不能工作,我可以理解為什么,但我不知道如何讓它們都工作。我對 golang 相當(dāng)陌生,所以我正在努力解決這個問題。我怎么能這么做呢?
1 回答

泛舟湖上清波郎朗
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個贊
你可以把它放在一個中間件中并在configure_XXX中掛接它
func mountWebSockets(next http.Handler) http.HandlerFunc {
? ?return func(w http.ResponseWriter, r *http.Request) {
? ? ? ?if r.URL.Path == "/ws" {
? ? ? ? ? ? chat.ServeWs(hub, w, r)
? ? ? ? ? ?return
? ? ? ?}
? ? ? ?next.ServeHTTP(w, r)
? ?}
}
- 1 回答
- 0 關(guān)注
- 272 瀏覽
添加回答
舉報(bào)
0/150
提交
取消