我正在尝试在我的 Golang 服务器和 VueJS 之间设置一个基本流。我按照StackOverflow上的另一篇文章开始。但是,由于某些奇怪的原因,当我在 chrome 中检查控制台时,输出会不断重复(0、1、2、3、4 -short stop- 0、1、2、3、4 -short stop- 等)。
这是我的代码
main.go
package main
import (
"io"
"time"
"github.com/gin-contrib/static"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/stream", func(c *gin.Context) {
chanStream := make(chan int, 2)
go func() {
defer close(chanStream)
for i := 0; i < 5; i++ {
chanStream <- i
time.Sleep(time.Second * 1)
}
}()
c.Stream(func(w io.Writer) bool {
if msg, ok := <-chanStream; ok {
c.SSEvent("message", msg)
return true
}
return false
})
})
r.StaticFile("/", "./public.html")
r.Use(static.Serve("/", static.LocalFile("./public.html", true)))
r.Run()
}
公共.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
var stream = new EventSource("/stream");
stream.addEventListener("message", function(e){
console.log(e.data);
});
</script>
</body>
</html>
我是 SSE 和 Vue 的新手,但我认为客户端等待来自服务器的响应。我的期望是,一旦 Gin 流结束,客户端就会一直等待并且在我执行 EventSource.close() 之前什么都不做。输出似乎服务器正常发送响应,但一旦流结束客户端继续发出请求?我不确定。有人可以指出我做错了什么吗?谢谢
暮色呼如
相关分类