Amazon web services 在aws中使用golang创建websocket
我正在尝试使用golang with gorilla on aws(没有docker)和负载平衡器创建WebSocket,我有一个连接到负载平衡器的证书 我设法使代码与http一起工作,但当我尝试通过https使用代码时,它不起作用 我做错了什么? 从http移动到https时,我将客户端请求更改为wss而不是ws,并将证书添加到负载平衡器。 这是我的密码。 这是我的主要任务Amazon web services 在aws中使用golang创建websocket,amazon-web-services,go,https,gorilla,Amazon Web Services,Go,Https,Gorilla,我正在尝试使用golang with gorilla on aws(没有docker)和负载平衡器创建WebSocket,我有一个连接到负载平衡器的证书 我设法使代码与http一起工作,但当我尝试通过https使用代码时,它不起作用 我做错了什么? 从http移动到https时,我将客户端请求更改为wss而不是ws,并将证书添加到负载平衡器。 这是我的密码。 这是我的主要任务 http.HandleFunc("/wss", serveWs) fmt.Printf("Listening
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”的升级标头”
这是我的负载平衡器配置:
我认为应该是
wss://www.weldpad.com/wss?
非wss://https://www.weldpad.com/wss?
我也尝试过,结果是:wsconnect.html WebSocket连接到'wss://www.weldpad.com/wss'failed:WebSocket握手时出错:意外响应代码:400这是一个更好的错误消息它正在从服务器得到响应。现在您需要查看您的服务器,可能需要检查服务器日志,看看它为什么返回400代码。查看日志,我发现“websocket:找不到带有标记“websocket”的升级头”,我正在查看它。找到它后,我丢失了tcp的负载平衡器映射,映射是SSL到tcp,一旦启用它,一切都正常了,谢谢马克,你的评论让我关注这个问题。