ホームページ > バックエンド開発 > Golang > チャネルが最初の API リクエストでデータを送信しない

チャネルが最初の API リクエストでデータを送信しない

WBOY
リリース: 2024-02-05 22:06:04
転載
704 人が閲覧しました

通道未在第一个 API 请求上发送数据

質問の内容

データをフロントエンドに送信する SSE エンドポイントがあり、そのデータは別のエンドポイントから来ています API エンドポイントによって取得されます。 gochannels についてはまだ初心者で、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 サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート