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

服务器启动后如何更改 http.Handle() 中的处理程序?

服务器启动后如何更改 http.Handle() 中的处理程序?

Go
达令说 2023-07-17 14:00:14
我在 Go 中使用 socketio "github.com/googollee/go-socket.io"。由于某种原因,我必须创建一个新的 *socketio.server 并将其注册到"/static/"已在旧的 *socketio.server 中注册的位置。这意味着我必须在http.Handle("/socket.io/", ioserver)服务器启动后替换处理程序 ioserver。下面是我的代码的一部分,当发生事情时,我将创建一个新的ioserver。我希望新的 ioserver 成为处理程序http.Handle("/socket.io/", ioserver)ioserver, _ = socketio.NewServer(nil)http.Handle("/socket.io/", ioserver)log.Fatal(http.ListenAndServe(":81", nil))
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

应用程序无法交换多路复用器中的处理程序,但它可以编写一个在其他处理程序之间交换的处理程序:


type swapper struct {

    mu sync.Mutex

    h http.Handler

}


func (s *swapper) setHandler(h http.Handler) {

    s.mu.Lock()

    s.h = h

    s.mu.Unlock()

}


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

    s.mu.Lock()

    h := s.h

    s.mu.Unlock()

    h.ServeHTTP(w, r)

}

像这样注册:


ioserver, _ = socketio.NewServer(nil)

s := &swapper{}

s.setHandler(ioserver)

http.Handle("/socket.io/", s)

log.Fatal(http.ListenAndServe(":81", nil))

应用程序可以随时调用 s.setHandler 来交换新的处理程序。


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

添加回答

举报

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