猿问

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

我正在尝试使用 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!

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


慕的地6264312
浏览 749回答 1
1回答

蓝山帝景

所述websocket.Upgrade函数劫持从http.ResponseWriter所述底层网络连接。在从 writer 劫持连接后调用 write 时,ResponseWriter.Write方法会记录此消息。在 websocket 处理程序返回后,应用程序使用的路由器或中间件似乎正在写入连接。
随时随地看视频慕课网APP

相关分类

Go
我要回答