我正在嘗試使用大猩猩websocket庫來感受websockets如何與Go一起工作。但是當我點擊瀏覽器上的刷新按鈕時,我總是收到這條錯誤消息。爲什麼我會收到錯誤消息「http:response.Write on hijacked connection」?
當我重裝,我使用測試WebSocket的網頁,我得到了去控制檯上這些錯誤消息:
2015/09/18 19:04:41 websocket: close 1001
2015/09/18 19:04:41 http: response.Write on hijacked connection
第一個是「徑自走開」的狀態代碼。我假設它是因爲當我刷新時,它離開websocket連接,所以對我來說很有意義。
但後來我收到一條錯誤信息,我不明白。被劫持的一個。我爲什麼得到它,它是什麼意思?
我在本地主機上運行我的代碼:8080在Windows機器上。
我使用的代碼:
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!
這是什麼意思?我是我做錯了什麼?
這只是一個猜測,但因爲它看起來像'wsHandler'總是返回一個錯誤,也許這個消息是由於某些東西試圖爲你寫出一個錯誤響應頁面?如果從Web套接字讀取的錯誤指示套接字已關閉,則應該返回'nil'。 –