データをフロントエンドに送信する SSE
エンドポイントがあり、そのデータは別のエンドポイントから来ています API
エンドポイントによって取得されます。 go
の channels
についてはまだ初心者で、SSE エンドポイントがフロントエンドにデータを送信するために API エンドポイントを 2 回トリガーする必要があるようです。今のところ、まだチャネルを使用しているため、SSE 接続を確立するためのフロントエンド コードは記述していません。 SSE にデータを送信させるために API を 2 回呼び出す必要がある理由を誰かが説明できますか?
上海証券取引所ルート
リーリーsse にデータを送信するための API
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 }
これが表示される理由は、このセクションで 2 つのメッセージを使用したためです
リーリー奇数のメッセージはすべて SSE に送信され、偶数のメッセージはすべてコンソールに記録されます。
に変更する必要があります リーリー以上がチャネルが最初の API リクエストでデータを送信しないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。