当前位置: 首页 > 面试题库 >

Flush()不起作用

石博艺
2023-03-14
问题内容

请检查这个要点并告诉我,怎么了?
为什么我看不到我的留言?
要点:https :
//gist.github.com/cnaize/895f61b762a9f5ee074c

如果简单,我有两个功能:

func send(param martini.Params, r render.Render) {
    Ct.Msgs <- param["msg"]

    fmt.Printf("Sent: %v", param["msg"])

    r.JSON(http.StatusOK, Response{"status": "ok"})
}

watch功能:

func watch(rw http.ResponseWriter, r render.Render) {
    var msg string
    ok := true
    for ok {
        select {
        case msg, ok = <-Ct.Msgs:
            rw.Write([]byte(msg))
            fmt.Printf("Wrote: %v", msg)
            f, ok := rw.(http.Flusher)
            if ok {
                f.Flush()
                fmt.Println("Flushed")
            } else {
                r.JSON(http.StatusOK, Response{"status": "error", "descr": "CANT_FLUSH"})
                return
            }
        }
    }

    r.JSON(http.StatusOK, Response{"status": "ok", "descr": "finished"})
}

为什么不起作用?

编辑:

我已经更新了要点。现在在哪里:

if i, err := rw.Write([]byte(msg)); err != nil {
    r.JSON(http.StatusOK, Response{"status": "error", "descr": err.Error()})
    return
} else {
    fmt.Printf("i: %v", i)
}

我在日志中:

 Sent: hello
 i: 5
 Wrote: hello
 Flushed

但是我什么也没看到。

有任何想法吗?


问题答案:

冲洗工作正常。问题是Chrome的纯文本呈现器在显示任何内容之前会等待完整的响应正文。强制将内容类型设置为html以查看增量响应:

func watch(rw http.ResponseWriter, r render.Render) {
    rw.Header().Set("Content-Type", "text/html")
    // same code as before
}


 类似资料:
  • 我有一个带有Spring(5.7.2)Web/Security的REST API项目。 我只有一个表,它包含一个id和一个名称。 当我删除光盘时,我的DiscsService会 当我需要插入或更新时,我会: 我了解到,当您希望在同一事务中使用值(提交之前)时,将使用,并且将同步并清空SQL缓存。 在我的例子中,我看到我在数据库中插入/更新或删除了值。 我应该使用flush()(我认为不应该),但可

  • 因此,我在一个控制器中有一个非常简单的代码片段,在这个代码片段中,我使用从外部文件中获取数据,它工作得很好!但是当我使用时,我会在控制台中得到一个

  • 问题内容: 该函数有一个布尔型可选参数,默认为False。 该文档说这是强制冲洗流。 我不明白冲洗的概念。这里是在冲水吗?什么是流冲洗? 问题答案: 通常,输出到文件或控制台已缓冲,至少在输出换行符之前会输出文本。刷新可确保所有缓冲的输出都将到达目的地。 我确实使用了它,例如,当我在获得输入之前输入诸如之类的用户提示时。 可以模拟(在使用Python 2.7的Ubuntu 12.4上): 如果运行

  • 立即触发 refresh 和 refreshHover 所标记的重绘操作。

  • 概要 <#flush> 描述 当 FreeMarker 生成输出时,它通常不会立即发送到最终接收端 (比如web浏览器或最终的文件),而是会将内容累积在缓冲区,发送一个大块的内容。 缓冲区的精确规则不是由 FreeMarker 决定的,而是由嵌入的软件决定的。 将缓冲区中累积的内容发送出去称为冲洗。尽管冲洗是自动发生的, 有时你想在模板处理时的一点强制执行,这就是 flush 指令要做的。如果需要

  • 问题内容: 正则表达式似乎还可以,因为第一行将子字符串正确替换为“ helloworld”,但是后者却不匹配,因为我看不到“ whynothelloworld?”。在控制台上 问题答案: 期望 整个 字符串匹配,而不仅仅是子字符串。 使用正则表达式匹配器对象的方法代替: