我"github.com/googollee/go-socket.io"在Go中使用socketio 。由于某种原因,我必须创建一个新的* 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))
Run Code Online (Sandbox Code Playgroud)
小智 6
应用程序无法在多路复用器中交换处理程序,但可以编写在其他处理程序之间交换的处理程序:
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)
}
Run Code Online (Sandbox Code Playgroud)
像这样注册:
ioserver, _ = socketio.NewServer(nil)
s := &swapper{}
s.setHandler(ioserver)
http.Handle("/socket.io/", s)
log.Fatal(http.ListenAndServe(":81", nil))
Run Code Online (Sandbox Code Playgroud)
应用程序可以随时调用s.setHandler来交换新的处理程序。
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |