go - 为什么我会收到错误消息 "http: response.Write on hijacked connection"?

标签 go websocket

我正在试用 gorilla websocket 库,以了解 websockets 如何与 Go 一起工作。但是当我点击浏览器上的刷新按钮时,我不断收到此错误消息。

当我重新加载用于测试 websocket 的网页时,我在 Go 控制台上收到以下错误消息:

2015/09/18 19:04:41 websocket: close 1001
2015/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 1001
2015/09/18 19:04:41 http: response.Write on hijacked connection
2015/09/18 19:04:43 foo!
2015/09/18 19:04:44 websocket: close 1001
2015/09/18 19:04:44 http: response.Write on hijacked connection
2015/09/18 19:04:46 foo!

这是什么意思?我是不是做错了什么?

最佳答案

关于go - 为什么我会收到错误消息 "http: response.Write on hijacked connection"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32657603/

相关文章:

playframework - 为什么 play 2.6 在空闲 85 秒后关闭 websocket?虽然玩 2.5 没有

go - 通过缓冲 channel (Golang) 限制并发执行进程的数量

ubuntu - "go get collidermain"时 golang.org/x/net/websocket 出错 --- 在 Ubuntu 14.04 服务器上部署 AppRTC

Python:同步程序中的Websockets

unit-testing - httptest.NewRequest 与 http.NewRequest : which one to use in tests and why?

c++ - 向浏览器发送数据时构建websocket头

scala - finagle-websocket 服务器示例不会在不阻塞监听的情况下死掉

string - 我如何在 Go 中表示可选字符串?

go - 在golang中 float 返回零

go - 范围/CIDR 中的剩余 IP