【发布时间】:2017-06-21 08:42:14
【问题描述】:
我正在尝试使用 golang 和 gorilla on aws(没有 docker)和负载均衡器创建 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’的升级标头”
这是我的负载均衡器配置:
【问题讨论】:
标签: amazon-web-services go https gorilla