2015-09-18 129 views
1

我正在嘗試使用大猩猩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! 

這是什麼意思?我是我做錯了什麼?

+0

這只是一個猜測,但因爲它看起來像'wsHandler'總是返回一個錯誤,也許這個消息是由於某些東西試圖爲你寫出一個錯誤響應頁面?如果從Web套接字讀取的錯誤指示套接字已關閉,則應該返回'nil'。 –

回答

相關問題