在golang webapp中处理发布请求时显示进度

时间:2017-01-28 09:23:00

标签: go progress

收到发布请求后,发布的数据会通过多个功能,处理完成后会显示合适的网页。问题是由于处理数据的功能需要花费一些时间,因此存在一些延迟。

有没有办法向客户展示数据处理的进度?基本上,当发布数据时,我希望显示一些消息,如

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

我正在使用golang作为我的后端和julienschmidt的httprouter。

2 个答案:

答案 0 :(得分:0)

处理程序w ResponseWriter中的

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

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。

答案 1 :(得分:0)

显示进度指示器是客户端代码的工作(在进行异步调用时)。

HTTP是一种请求 - 响应协议。响应具有标准格式(包括状态行,标题,消息正文)。它们不是部分发送的。

您的建议与TCP连接有关,但与HTTP无关。