func vkvWatchKeyHandler(vkvhub *hub.Hub) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) defer func() { log.Printf("WATCH CLOSE") }() conn, _ := sse.Upgrade(w, r) notify := w.(http.CloseNotifier).CloseNotify() stream := vkvhub.Sub(vars["key"]) L: for { select { case <-notify: log.Printf("Close") vkvhub.Unsub(vars["key"], stream) break L case m := <-stream: conn.WriteString(m) } } } }