第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用通道將時間推送到瀏覽器

使用通道將時間推送到瀏覽器

Go
瀟瀟雨雨 2022-12-19 21:09:00
我正在嘗試使用頻道將時間推送到瀏覽器,所以我寫了以下內(nèi)容:package mainimport (    "net/http"    "time")type DataPasser struct {    logs chan string}func main() {    passer := &DataPasser{logs: make(chan string)}    go func() {        for {            passer.logs <- time.Now().String()        }    }()    http.HandleFunc("/", passer.handleHello)    http.ListenAndServe(":9999", nil)}func (p *DataPasser) handleHello(w http.ResponseWriter, r *http.Request) {    for {        w.Write([]byte(<-p.logs))    }    /*  for {            io.WriteString(w, <-p.logs)        }    */}它通過在每個新時間不斷添加新行來工作,如下所示:我需要的是單行,每次服務(wù)器向它發(fā)送時間時,它都會被清除并替換為新時間?有幫助嗎?
查看完整描述

1 回答

?
繁星點點滴滴

TA貢獻1803條經(jīng)驗 獲得超3個贊

應(yīng)用程序必須以文本/事件流格式編寫響應(yīng):


fmt.Fprintf(w, "data: %s\n\n", <-p.logs)

還有其他問題。當(dāng)客戶端斷開連接或?qū)懭腠憫?yīng)時出現(xiàn)錯誤時,處理程序應(yīng)退出。處理程序應(yīng)在等待第一個事件之前刷新標(biāo)頭。這是更新后的代碼:


func (p *DataPasser) handleHello(w http.ResponseWriter, r *http.Request) {

    setupCORS(w, r)

    w.Header().Set("Content-Type", "text/event-stream")

    flusher, ok := w.(http.Flusher)

    if !ok {

        http.Error(w, "Internal error", 500)

        return

    }

    flusher.Flush()

    done := r.Context().Done()

    defer fmt.Println("EXIT")

    for {

        select {

        case <-done:

            // the client disconnected

            return

        case m := <-p.logs:

            if _, err := fmt.Fprintf(w, "data: %s\n\n", m); err != nil {

                // Write to connection failed. Subsequent writes will probably fail.

                return

            }

            flusher.Flush()

        }

    }

}


查看完整回答
反對 回復(fù) 2022-12-19
  • 1 回答
  • 0 關(guān)注
  • 80 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號