为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我会收到错误消息“http: response.Write on hijacked

为什么我会收到错误消息“http: response.Write on hijacked

Go
慕的地6264312 2021-11-08 16:11:04
我正在尝试使用 gorilla websocket 库来了解 websockets 如何与 Go 一起工作。但是当我点击浏览器上的刷新按钮时,我不断收到此错误消息。当我重新加载用于测试 websocket 的网页时,我在 Go 控制台上收到以下错误消息:2015/09/18 19:04:41 websocket: close 10012015/09/18 19:04:41 http: response.Write on hijacked connection第一个是“离开”的状态代码。我假设这是因为当我点击刷新时它会远离 websocket 连接,所以这对我来说很有意义。但是后来我收到一条我不明白的错误消息。被劫持者。为什么我会得到它,它是什么意思?我在 Windows 机器上的 localhost:8080 上运行我的代码。我正在使用的代码:func wsHandler(w http.ResponseWriter, r *http.Request, _ httprouter.Params) error {    conn, err := websocket.Upgrade(w, r, nil, 1024, 1024)    if err != nil {        return err    }    defer conn.Close()    for {        _, msg, err := conn.ReadMessage()        if err != nil {            return err        }        log.Println(string(msg))    }    return nil}客户端:var conn = new WebSocket("ws://localhost:8080/api/messages/websocket");conn.onclose = function (e) {    console.log("onclose fired");};conn.onopen = function (e) {    console.log("onopen fired");};conn.onmessage = function (e) {    console.log(e.data);};              setTimeout(function () {    conn.send("foo!");}, 1500);当我第一次加载页面时,只foo!输出到控制台。总而言之,在加载页面一次,然后重新加载两次后,我得到如下输出:2015/09/18 19:04:39 foo!2015/09/18 19:04:41 websocket: close 10012015/09/18 19:04:41 http: response.Write on hijacked connection2015/09/18 19:04:43 foo!2015/09/18 19:04:44 websocket: close 10012015/09/18 19:04:44 http: response.Write on hijacked connection2015/09/18 19:04:46 foo!这是什么意思?我是不是做错了什么?
查看完整描述

1 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

所述websocket.Upgrade函数劫持从http.ResponseWriter所述底层网络连接

从 writer 劫持连接后调用 write 时ResponseWriter.Write方法会记录此消息

在 websocket 处理程序返回后,应用程序使用的路由器或中间件似乎正在写入连接。


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 748 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信