【发布时间】:2017-12-03 03:52:32
【问题描述】:
我想在 golang 中使用 gin-gonic 服务器创建一个流式 API。
func StreamData(c *gin.Context) {
chanStream := make(chan int, 10)
go func() {for i := 0; i < 5; i++ {
chanStream <- i
time.Sleep(time.Second * 1)
}}()
c.Stream(func(w io.Writer) bool {
c.SSEvent("message", <-chanStream)
return true
})
}
router.GET("/stream", controller.StreamData)
但是当我试图到达终点时,它只是卡住了,没有响应。 是否有人使用了流功能,以便他/她可以指出我可能正在做的错误。谢谢!
【问题讨论】:
-
解决了这个问题。在SSEvent之后,返回true就是让stream函数继续运行,在channel通信完成后,我们需要在stream关闭后返回false。
-
但是现在的问题是,在时间流函数运行之前,调用者并没有得到任何流数据,只有在c.Stream函数完成后才能得到。
标签: api go streaming goroutine go-gin