> 백엔드 개발 > Golang > 첫 번째 API 요청 시 채널이 데이터를 보내지 않음

첫 번째 API 요청 시 채널이 데이터를 보내지 않음

WBOY
풀어 주다: 2024-02-05 22:06:04
앞으로
715명이 탐색했습니다.

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

질문 내용

아직 SSE 端点,它将数据发送到前端,并且该数据是从另一个 API 端点检索的。我对 go 中的 channels이 처음인데 SSE 엔드포인트가 프런트엔드에 데이터를 보내려면 API 엔드포인트를 두 번 트리거해야 하는 것 같습니다. 지금은 여전히 ​​채널을 사용하고 있기 때문에 SSE 연결을 설정하기 위한 프런트 엔드 코드를 작성하지 않았습니다. SSE가 데이터를 보내도록 하기 위해 API를 두 번 호출해야 하는 이유를 누군가 설명할 수 있습니까?

상하이 증권거래소 경로

으아악

sse

로 데이터를 보내는 API
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: %s\n\n", <-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

}

로그인 후 복사

정답


이게 보이는 이유는 이 섹션에서 메시지를 2개 사용했기 때문입니다

으아악

모든 홀수 메시지는 SSE로 전송되고 모든 짝수 메시지는 콘솔에 기록됩니다.

로 변경해야 합니다. 으아악

위 내용은 첫 번째 API 요청 시 채널이 데이터를 보내지 않음의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿