我在 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 来交换新的处理程序。
- 1 回答
- 0 关注
- 86 浏览
添加回答
举报
0/150
提交
取消