Dieses Beispiel zeigt, wie man einige Blöcke bei einem Ereignis ersetzt, zum Beispiel „Beitrag mit ID 1 geändert“ ( post-1-changed ) und den Auslöser zum Laden von Inhalten über eine Ajax-Anfrage bei „chatter“ auslöst. Veranstaltung.
package main import ( "fmt" "net/http" "time" "github.com/r3labs/sse/v2" ) func main() { server := sse.New() _ = server.CreateStream("messages") mux := http.NewServeMux() mux.HandleFunc("/events", func(w http.ResponseWriter, r *http.Request) { // la security token := r.URL.Query().Get("token") if token != "secret" { http.Error(w, "invalid token", http.StatusUnauthorized) return } go func() { <-r.Context().Done() println("The client is disconnected here") return }() server.ServeHTTP(w, r) }) mux.HandleFunc("/chatroom", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(`Hello from chat room`)) }) mux.HandleFunc("/index", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(`oneoneoneone`)) }) go func() { i := 0 for { i++ time.Sleep(1 * time.Second) server.TryPublish("messages", &sse.Event{ ID: []byte(fmt.Sprintf("%d", i)), Event: []byte("post-1-changed"), Data: []byte(`chat body reloadedHello from sse ` + fmt.Sprintf("%d", i) + ``), }) server.TryPublish("messages", &sse.Event{ ID: []byte(fmt.Sprintf("%d", i)), Event: []byte("notifications"), Data: []byte(`Hello from post 2 sse ` + fmt.Sprintf("%d", i) + ``), }) server.TryPublish("messages", &sse.Event{ ID: []byte(fmt.Sprintf("%d", i)), Event: []byte("chatter"), Data: []byte(``), }) server.EventTTL = 5 * time.Second } }() http.ListenAndServe(":9999", mux) }
Das obige ist der detaillierte Inhalt vonGehen Sie zum Beispiel Htmx und SSE. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!