gin 的 ctx.Stream 为啥要等方法执行完后才一次性输出结果?-灵析社区

莫克先森

gin 的ctx.Stream 为啥不起作用,也就是说必须要等控制器方法执行完成后,`ctx.Stream` 输出才会一次性的依次性输出?

阅读量:146

点赞量:0

问AI
在 gin 启用了压缩输出中间件时,"ctx.Stream" 不起作用,参见: r := gin.New() r.Use(brotli.Brotli(brotli.DefaultCompression)) 在这种情况下,其实前端请求的时候,在 "Header" 中带上 "Content-Type: text/event-stream" 即可。 参见 "gin" 的 "gin_brotli.go" 中的方法: func shouldCompress(req *http.Request, options *Options) bool { if !strings.Contains(req.Header.Get("Accept-Encoding"), "br") || strings.Contains(req.Header.Get("Connection"), "Upgrade") || strings.Contains(req.Header.Get("Content-Type"), "text/event-stream") { return false } extension := filepath.Ext(req.URL.Path) if len(extension) < 4 { // fast path return true } if skip := containsString(options.SkipExtensions, extension); skip { return false } else { return true } }