我在 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 關注
- 113 瀏覽
添加回答
舉報
0/150
提交
取消