最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • 通道未在第一个 API 请求上发送数据

    通道未在第一个 api 请求上发送数据

    问题内容

    我有一个 SSE 端点,它将数据发送到前端,并且该数据是从另一个 API 端点检索的。我对 go 中的 channels 仍然很陌生,似乎我必须触发 API 端点两次,以便 SSE 端点将数据发送到前端。就目前而言,我还没有编写前端代码来建立 SSE 连接,因为我仍在使用通道。有人可以解释为什么这需要调用 API 两次才能让 SSE 发送数据吗?

    上交所路线

    func SendSSE(appCtx *fiber.Ctx, dataChannel chan string) error {
        appCtx.Set("Content-Type", "text/event-stream")
        appCtx.Set("Cache-Control", "no-cache")
        appCtx.Set("Connection", "keep-alive")
        appCtx.Set("Transfer-Encoding", "chunked")
    
        appCtx.Context().SetBodyStreamWriter(fasthttp.StreamWriter(func(w *bufio.Writer) {
            log.Println("SSE Opened")
            for {
                log.Println("Retrieving data channel..")
                fmt.Fprintf(w, "data: Message: %snn", <-dataChannel)
                log.Println(<-dataChannel)
    
                err := w.Flush()
                if err != nil {
                    // Refreshing page in web browser will establish a new
                    // SSE connection, but only (the last) one is alive, so
                    // dead connections must be closed here.
                    fmt.Printf("Error while flushing: %v. Closing http connection.n", err)
    
                    break
                }
    
            }
        }))
    
        fmt.Println("SSE Closed")
        return nil
    
    }
    
    

    向sse发送数据的API

    func GetApiData(appCtx *fiber.Ctx, dataChannel chan string) error {
        log.Println("Sending DataChannel data")
        dataChannel <- "Data is passed from api to sse"
        return appCtx.Status(http.StatusOK).SendString("Not Implemented")
    }
    
    

    正确答案

    您看到此情况的原因是您在此部分中使用了 2 条消息

    fmt.Fprintf(w, "data: Message: %snn", <-dataChannel)
    log.Println(<-dataChannel)

    每条奇数消息都会发送到 SSE,每条偶数消息都会记录到控制台。应改为

    message := <-dataChannel
    fmt.Fprintf(w, "data: Message: %snn", message)
    log.Println(message)
    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » 通道未在第一个 API 请求上发送数据
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 293稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情