Heim >Backend-Entwicklung >Golang >Verarbeitung von Streaming-HTTP-Antworten
Der PHP-Editor Zimo führt Sie in die Methode zur Verarbeitung von Streaming-HTTP-Antworten ein. Bei der Entwicklung von Webanwendungen müssen wir uns häufig mit dem Herunterladen großer Dateien oder der Übertragung von Echtzeit-Streaming-Medien befassen. Die herkömmliche Methode, den gesamten Antwortinhalt auf einmal zu laden, führt zu einer übermäßigen Speichernutzung und beeinträchtigt die Leistung. Um dieses Problem zu lösen, können wir Streaming-HTTP-Antworten verwenden. Durch Streaming von HTTP-Antworten können Antwortinhalte in Blöcken übertragen werden, wodurch die Speichernutzung reduziert und die Benutzererfahrung verbessert wird. In PHP können wir einige Bibliotheken oder benutzerdefinierte Methoden verwenden, um Streaming-HTTP-Antworten zu implementieren und so unsere Webanwendungen zu optimieren.
Ich habe das folgende Beispiel, das eine Verbindung zu einem HTTP-Dienst herstellt, der die Antwort in Blöcken zurückstreamt, um eine JSON-Struktur zu erstellen. Für jeden Block hängt mein Code nach Fertigstellung ein Byte rb
数组和各个行。但是,我的问题是尝试在 rb
an, damit ich ihn dekodieren kann.
Übersehe ich hier etwas Offensichtliches?
package main import ( "bufio" "bytes" "fmt" "io" "net/http" ) func main() { body := []byte("test") resp, err := http.Post("http://localhost:8281/tap", "application/json", bytes.NewReader(body)) if err != nil { fmt.Printf("%v\n", err) return } defer resp.Body.Close() fmt.Printf("Status: [%s]\n", resp.Status) fmt.Println() //var rb []byte reader := bufio.NewReader(resp.Body) var rb []byte for { line, err := reader.ReadBytes('\n') if err != nil { if err == io.EOF { break } fmt.Printf("Error reading streamed bytes %v", err) } rb = append(rb, line...) fmt.Println(rb) } }
den Fehler im Programm ignorieren und rb
abschließen, nachdem die Schleife unterbrochen wurde.
Dieses Programm hat Fehler:
Es sieht so aus, als ob Ihr Ziel darin besteht, die gesamte Reaktion auf rb
aufzunehmen. Verwenden Sie dazu io.ReadAll:
resp, err := http.Post("http://localhost:8281/tap", "application/json", bytes.NewReader(body)) if err != nil { fmt.Printf("%v\n", err) return } defer resp.Body.Close() rb, err := io.ReadAll(resp.Body) if err != nil { // handle error } var data SomeType err = json.Unmarshal(rb, &data) if err != nil { // handle error }
Wenn Sie den Antworttext in JSON dekodieren möchten, ist es besser, den JSON-Decoder den Antworttext lesen zu lassen:
resp, err := http.Post("http://localhost:8281/tap", "application/json", bytes.NewReader(body)) if err != nil { fmt.Printf("%v\n", err) return } defer resp.Body.Close() var data SomeType err := json.NewDecoder(resp.Body).Decode(&data)
Das obige ist der detaillierte Inhalt vonVerarbeitung von Streaming-HTTP-Antworten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!