为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 go-swagger 提供 websocket 服务?

如何使用 go-swagger 提供 websocket 服务?

Go
守着一只汪 2023-07-31 14:56:55
我正在尝试在我的 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 相当陌生,所以我正在努力解决这个问题。我怎么能这么做呢?
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超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)

   }

}


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信