在我的代碼中,我os.Interrupt在關(guān)閉之前收聽(tīng)了以下內(nèi)容package mainimport ( "net/http" "os" "os/signal" "syscall")var passer *DataPasserconst maxClients = 1func init() { passer = &DataPasser{ data: make(chan sseData), logs: make(chan string), connection: make(chan struct{}, maxClients), }}func main() { http.HandleFunc("/sse", passer.HandleSignal) go http.ListenAndServe(":1234", nil) // Listen to Ctrl+C (you can also do something else that prevents the program from exiting) c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, syscall.SIGTERM) <-c if client.IsConnected() { client.Disconnect() }}這passer.HandleSignal是一個(gè)將 SSE 發(fā)送Server Sent Event到客戶(hù)端的函數(shù),如下所示:package mainimport ( "fmt" "net/http")type sseData struct { event, message string}type DataPasser struct { data chan sseData connection chan struct{} // To control maximum allowed clients connections}func (p *DataPasser) HandleSignal(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/event-stream; charset=utf-8") w.Header().Set("Cache-Control", "no-cache") w.Header().Set("Connection", "keep-alive") fmt.Println("Client connected from IP:", r.RemoteAddr) p.connection <- struct{}{} flusher, ok := w.(http.Flusher) if !ok { http.Error(w, "Internal error", 500) return } fmt.Fprint(w, "event: notification\ndata: Connection to WhatsApp server ...\n\n") flusher.Flush() // Connect to the WhatsApp client go Connect() for { select { case data := <-p.data: fmt.Println("recieved") 我的問(wèn)題是,如果用戶(hù)使用 Ctrl+C 中斷了應(yīng)用程序,該main函數(shù)正在響應(yīng)它,我需要它向它發(fā)送數(shù)據(jù),parser以便處理程序向客戶(hù)端發(fā)送服務(wù)器已關(guān)閉的通知
如何在收到 os.Interrupt后從服務(wù)器向客戶(hù)端發(fā)送信號(hào)
滄海一幻覺(jué)
2023-01-03 14:08:43