Saya mempunyai SSE
端点,它将数据发送到前端,并且该数据是从另一个 API
端点检索的。我对 go
中的 channels
yang masih baharu dan nampaknya saya perlu mencetuskan titik akhir API dua kali agar titik akhir SSE menghantar data ke bahagian hadapan. Buat masa ini, saya belum menulis kod bahagian hadapan untuk mewujudkan sambungan SSE kerana saya masih menggunakan saluran. Bolehkah seseorang menjelaskan mengapa ini memerlukan panggilan API dua kali untuk mendapatkan SSE menghantar data?
Laluan Bursa Saham Shanghai
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 untuk menghantar data ke 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") }
Sebab anda melihat ini adalah kerana anda menggunakan 2 mesej dalam bahagian ini
fmt.Fprintf(w, "data: Message: %s\n\n", <-dataChannel) log.Println(<-dataChannel)
Setiap mesej ganjil dihantar ke SSE dan setiap mesej genap dilog masuk ke konsol. Hendaklah ditukar kepada
message := <-dataChannel fmt.Fprintf(w, "data: Message: %s\n\n", message) log.Println(message)
Atas ialah kandungan terperinci Saluran tidak menghantar data pada permintaan API pertama. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!