아직 SSE
端点,它将数据发送到前端,并且该数据是从另一个 API
端点检索的。我对 go
中的 channels
이 처음인데 SSE 엔드포인트가 프런트엔드에 데이터를 보내려면 API 엔드포인트를 두 번 트리거해야 하는 것 같습니다. 지금은 여전히 채널을 사용하고 있기 때문에 SSE 연결을 설정하기 위한 프런트 엔드 코드를 작성하지 않았습니다. SSE가 데이터를 보내도록 하기 위해 API를 두 번 호출해야 하는 이유를 누군가 설명할 수 있습니까?
상하이 증권거래소 경로
으아악sse
로 데이터를 보내는 APIfunc 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!