2017-02-03 36 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