go - 在 golang webapp 中处理 post 请求时显示进度

标签 go progress

收到发布请求后,发布的数据会通过多个函数,处理完成后会显示合适的网页。问题是存在一点延迟,因为处理数据的函数有点耗时。

有什么方法可以向客户展示数据处理的进度吗?本质上,当发布数据时,我希望显示一些消息,例如

Loading data (xyz conversion done)
Loading data (xyz added to stream)

我使用 golang 作为我的后端,并使用 julienschmidt 的 httprouter 。

最佳答案

处理程序中的

w ResponseWriter func(w ResponseWriter,r *Request) 最有可能实现 http.Flusher 接口(interface)。所以你可以

io.WriteString(w, "Loading data (xyz conversion done)")
w.(http.Flusher).Flush() //you must assert it implements
io.WriteString(w, payload)

在所有工作完成之前刷新给客户端。 为了获得更多控制权,您甚至可以劫持连接

conn, bufrw, err :=w.(http.Hijacker).Hijack()
defer conn.Close()
bufrw.WriteString("Loading data (xyz conversion done)")
bufrw.Flush()
bufrw.WriteString("Loading data (xyz added to stream)")
bufrw.Flush()

并使用原始 TCP。

关于go - 在 golang webapp 中处理 post 请求时显示进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41908171/

相关文章:

go - 微服务无法使用 Docker for Mac 进行通信

string - 如何在 Go 中获取 rune 的十进制值?

java - 在java中获取解压缩文件的进度

android - 通过 Retrofit 2 Asynchronous 下载时是否可以显示进度条?

pointers - 如何定义一个函数,该函数接收一个指针作为参数并返回一个指向该参数的子节点之一的指针?

go - 如何使用连接池到 aerospike 服务器

php - 如何让我的php程序一直在linux下运行?

android - ProgressDialog.show() 的上下文参数是什么?

python - 监控 Rsync 进度

json - 解码一个 json 流(不是换行符分隔的)