PHP 편집자 Zimo가 스트리밍 HTTP 응답을 처리하는 방법을 소개합니다. 웹 애플리케이션을 개발할 때 대용량 파일을 다운로드하거나 실시간 스트리밍 미디어를 전송해야 하는 경우가 많습니다. 전체 응답 내용을 한 번에 로드하는 전통적인 방법은 과도한 메모리 사용량을 유발하고 성능에 영향을 미칩니다. 이 문제를 해결하기 위해 스트리밍 HTTP 응답을 사용할 수 있습니다. 스트리밍 HTTP 응답은 응답 콘텐츠를 청크로 전송하여 메모리 사용량을 줄이고 사용자 경험을 향상시킬 수 있습니다. PHP에서는 일부 라이브러리나 사용자 지정 메서드를 사용하여 스트리밍 HTTP 응답을 구현하여 웹 애플리케이션을 최적화할 수 있습니다.
JSON 구조를 생성하기 위해 응답을 청크로 다시 스트리밍하는 HTTP 서비스에 연결하는 다음 예가 있습니다. 각 청크에 대해 내 코드는 완료되면 디코딩할 수 있도록 바이트 rb
数组和各个行。但是,我的问题是尝试在 rb
를 추가합니다.
여기서 뭔가 분명한 것을 놓치고 있는 걸까요?
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) } }
프로그램의 버그를 무시하고 rb
루프가 중단된 후 완료하세요.
이 프로그램에는 버그가 있습니다:
귀하의 목표는 rb
에 대한 전체 응답을 흡수하는 것인 것 같습니다. io.ReadAll을 사용하여 다음을 수행하세요.
응답 본문을 JSON으로 디코딩하려는 경우 JSON 디코더가 응답 본문을 읽도록 하는 더 좋은 방법은 다음과 같습니다.
으아악위 내용은 스트리밍 HTTP 응답 처리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!