2017-02-03 33 views
1

我試圖用負載平衡器在aws(無docker)上使用golang和大猩猩創建websockets,我有一個連接到負載平衡器的證書。在aws中使用golang創建websocket

我設法使代碼與http一起工作,但是當我嘗試通過https使用代碼時,它不起作用。

我在做什麼錯? 當從http轉移到https時,我將客戶端請求更改爲wss而不是ws,並將證書添加到負載平衡器。 這是我的代碼。 這是我main.go

http.HandleFunc("/wss", serveWs) 

fmt.Printf("Listening on port %s\n\n", port) 


if err := http.ListenAndServe(":"+port, nil); err != nil { 
    fmt.Printf(err.Error()) 
} 

這是serveWs:

func serveWs(w http.ResponseWriter, r *http.Request) { 
upgrader.CheckOrigin = func(r *http.Request) bool { 
    // allow all connections by default 
    return true 
} 

ws, err := upgrader.Upgrade(w, r, nil) 
if err != nil { 
    fmt.Println(err) 
    if _, ok := err.(websocket.HandshakeError); !ok { 
     log.Println(err) 
    } 
    return 
} 

var lastMod time.Time 

if n, err := strconv.ParseInt(r.FormValue("lastMod"), 16, 64); err != nil { 
    lastMod = time.Unix(0, n) 
} 

go writer(ws, lastMod, w, r) 
reader(ws) 

}

這是請求:

var conn = new WebSocket("wss://https://www.weldpad.com/wss?" 

當我從發送請求客戶端出現以下錯誤:

失敗:WebSocket握手期間出錯:意外的響應代碼:400

看看服務器日誌,我明白了。

「找不到升級頭與令牌「的WebSocket」

這是我的負載平衡器配置:

Load Balancing Configuration

回答

0

我相信這應該是wss://www.weldpad.com/wss?wss://https://www.weldpad.com/wss?

+0

我也曾嘗試它和響應是:wsconnect.html WebSocket連接到'wss://www.weldpad.com/wss'失敗:在WebSocket握手期間出錯:意外的響應代碼:400 – WeldPad

+0

那麼這是一個更好的錯誤或消息。它從服務器獲得響應。現在,您需要查看服務器,可能會檢查服務器日誌,並瞭解它返回400代碼的原因。 –

+0

看着日誌,我發現「websocket:無法找到具有令牌'websocket'的升級頭」,我正在研究它。 – WeldPad