0

go-swagger API 内でチャット WebSocket を提供しようとしています。この例を使用しています: https://github.com/gorilla/websocket/tree/master/examples/chat

サーバーの起動時にhttpに接続しようとしましたが、さらに読んだ後、これは機能しないことがわかりました:

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)
  })
}

次に、カスタムサーバーを使用して、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 ハンドシェイク中のエラー: 予期しない応答コード: 404

いくつか読んだ後、/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)
}

現在、websockets は機能しますが、残りの API は機能しません。理由はわかりますが、両方を機能させる方法はわかりません。私はgolangにかなり慣れていないので、これに苦労しています。

どうすればそれができますか?

ありがとう。

4

1 に答える 1