Heim >Backend-Entwicklung >Golang >Der Kanal sendet bei der ersten API-Anfrage keine Daten
Ich habe ein SSE
端点,它将数据发送到前端,并且该数据是从另一个 API
端点检索的。我对 go
中的 channels
, das noch neu ist, und es scheint, als müsste ich den API-Endpunkt zweimal auslösen, damit der SSE-Endpunkt Daten an das Frontend senden kann. Im Moment habe ich den Front-End-Code zum Herstellen einer SSE-Verbindung noch nicht geschrieben, da ich immer noch Kanäle verwende. Kann jemand erklären, warum hierfür ein zweimaliger Aufruf der API erforderlich ist, damit SSE die Daten sendet?
Shanghai Stock Exchange Route
func SendSSE(appCtx *fiber.Ctx, dataChannel chan string) error { appCtx.Set("Content-Type", "text/event-stream") appCtx.Set("Cache-Control", "no-cache") appCtx.Set("Connection", "keep-alive") appCtx.Set("Transfer-Encoding", "chunked") appCtx.Context().SetBodyStreamWriter(fasthttp.StreamWriter(func(w *bufio.Writer) { log.Println("SSE Opened") for { log.Println("Retrieving data channel..") fmt.Fprintf(w, "data: Message: %s\n\n", <-dataChannel) log.Println(<-dataChannel) err := w.Flush() if err != nil { // Refreshing page in web browser will establish a new // SSE connection, but only (the last) one is alive, so // dead connections must be closed here. fmt.Printf("Error while flushing: %v. Closing http connection.\n", err) break } } })) fmt.Println("SSE Closed") return nil }
API zum Senden von Daten an sse
func GetApiData(appCtx *fiber.Ctx, dataChannel chan string) error { log.Println("Sending DataChannel data") dataChannel <- "Data is passed from api to sse" return appCtx.Status(http.StatusOK).SendString("Not Implemented") }
Der Grund, warum Sie das sehen, ist, dass Sie in diesem Abschnitt zwei Nachrichten verwendet haben
fmt.Fprintf(w, "data: Message: %s\n\n", <-dataChannel) log.Println(<-dataChannel)
Jede ungerade Nachricht wird an SSE gesendet und jede gerade Nachricht wird in der Konsole protokolliert. Sollte in
geändert werdenmessage := <-dataChannel fmt.Fprintf(w, "data: Message: %s\n\n", message) log.Println(message)
Das obige ist der detaillierte Inhalt vonDer Kanal sendet bei der ersten API-Anfrage keine Daten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!