Go でチャンク化された HTTP 応答を段階的にストリーミングする方法は?
Go でのチャンク化された HTTP 応答のストリーミング
問題ステートメント:
Go HTTP の実装時チャンク化された応答を送信するサーバーでは、サーバーは最後にすべてのチャンクを一貫して配信します。段階的に送信するのではなく、指定された期間の送信を行います。さらに、Go は、コンテンツが事前に不明な場合でも、0 より大きい値を持つ Content-Length ヘッダーを自動的に組み込みます。
解決策:
インクリメンタルを有効にするにはチャンクを送信し、Content-Length ヘッダーを時期尚早に設定しないようにするには、次に従ってください。手順:
- Transfer-Encoding ヘッダーの削除: Go は、ライターがチャンク化された応答を送信するときに、 Transfer-Encoding ヘッダーを自動的に処理します。したがって、明示的に設定する必要はありません。
- Embrace Flush: 各チャンクを応答ストリームに書き込んだ直後にフラッシュするには、http.ResponseWriter.Flush() を使用します。これにより、チャンク エンコーディングがトリガーされ、応答の完了を待たずにチャンクが送信されます。
コード例:
package main import ( "fmt" "log" "net/http" "time" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { flusher, ok := w.(http.Flusher) if !ok { panic("expected http.ResponseWriter to be an http.Flusher") } w.Header().Set("X-Content-Type-Options", "nosniff") for i := 1; i <= 10; i++ { fmt.Fprintf(w, "Chunk #%d\n", i) flusher.Flush() time.Sleep(500 * time.Millisecond) } }) log.Print("Listening on localhost:8080") log.Fatal(http.ListenAndServe(":8080", nil)) }
検証:
Telnet を使用してサーバーをテストすると、チャンクが送信されていることが表示されます段階的に:
$ telnet localhost 8080 Trying ::1... Connected to localhost. Escape character is '^]'. GET / HTTP/1.1 HTTP/1.1 200 OK Date: Tue, 02 Jun 2015 18:16:38 GMT Content-Type: text/plain; charset=utf-8 Transfer-Encoding: chunked 9 Chunk #1 9 Chunk #2 ...
以上がGo でチャンク化された HTTP 応答を段階的にストリーミングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?
