"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > गो HTTP सर्वर उत्तरोत्तर प्रतिक्रियाएं क्यों नहीं भेजते हैं?

गो HTTP सर्वर उत्तरोत्तर प्रतिक्रियाएं क्यों नहीं भेजते हैं?

2025-04-14 को पोस्ट किया गया
ब्राउज़ करें:952

] सर्वर एक-दूसरे अंतराल पर चंक्स लिखने का इरादा रखता है, जिससे क्लाइंट को उन्हें मांग पर प्राप्त करने की अनुमति मिलती है। हालाँकि, वर्तमान कार्यान्वयन चुनौतियों का सामना करता है:

Why Doesn't My Go HTTP Server Send Chunked Responses Progressively?

क्लाइंट को एक बार में एक बार में एक साथ प्राप्त करने के बजाय सभी चंक्स प्राप्त हो रहा है। बशर्ते सर्वर कोड इस प्रकार है:

फंक हैंडपोस्ट (w http.responsewriter, r *http.request) { डब्ल्यू। W.Header ()। सेट ("ट्रांसफर-एन्कोडिंग", "chunked") W.Header ()। सेट ("x- सामग्री-प्रकार-विकल्प", "nosniff") टिकर: = time.newticker (time.second) गो फंक () { t के लिए: = रेंज टिकर.सी { io.writestring (w, "चंक") fmt.println ("टिक", टी) } } () time.sleep (time.second * 5) ticker.stop () fmt.println ("समाप्त: सामग्री-लंबाई वापस करना चाहिए: 0 यहाँ") W.Header ()। सेट ("सामग्री-लंबाई", "0") }

समाधान

  1. प्रत्येक चंक के लिखे जाने के बाद इसे जोड़कर, क्लाइंट तैयार होने के बाद क्लाइंट चंक्स प्राप्त कर सकता है। "एफएमटी" "io" "लकड़ी का लट्ठा" "नेट/http" "समय" ) func मुख्य () { http.handlefunc ("/", func (w http.responsewriter, r *http.request) { फ्लशर, ओके: = डब्ल्यू। (http.flusher) अगर! ठीक है { पैनिक ("अपेक्षित http.responsewriter एक http.flusher होने के लिए")) } W.Header ()। सेट ("x- सामग्री-प्रकार-विकल्प", "nosniff") के लिए i: = 1; मैं

सत्यापन

सर्वर से कनेक्ट करने के लिए टेलनेट का उपयोग करें: ... HTTP/1.1 200 ओके तारीख: ... सामग्री-प्रकार: पाठ/सादा; charset = UTF-8 ट्रांसफर-एन्कोडिंग: चंक 9 चंक #1 9 चंक #2 ...

func HandlePost(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Connection", "Keep-Alive")
    w.Header().Set("Transfer-Encoding", "chunked")
    w.Header().Set("X-Content-Type-Options", "nosniff")

    ticker := time.NewTicker(time.Second)
    go func() {
        for t := range ticker.C {
            io.WriteString(w, "Chunk")
            fmt.Println("Tick at", t)
        }
    }()
    time.Sleep(time.Second * 5)
    ticker.Stop()
    fmt.Println("Finished: should return Content-Length: 0 here")
    w.Header().Set("Content-Length", "0")
}
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3