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

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

WBOY
WBOY앞으로
2024-02-05 22:06:04710검색

通道未在第一个 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으로 문의하시기 바랍니다. 삭제