【问题标题】:Create websocket using golang in aws在 aws 中使用 golang 创建 websocket
【发布时间】: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’的升级标头”

这是我的负载均衡器配置:

Load Balancing Configuration

【问题讨论】:

    标签: amazon-web-services go https gorilla


    【解决方案1】:

    我认为应该是wss://www.weldpad.com/wss? 而不是wss://https://www.weldpad.com/wss?

    【讨论】:

    • 我也试过了,响应是:wsconnect.html WebSocket连接到'wss://www.weldpad.com/wss'失败:WebSocket握手期间出错:意外响应代码:400
    • 嗯,这是一个更好的错误消息。它正在从服务器获得响应。现在您需要查看您的服务器,也许检查服务器日志,看看它为什么返回 400 代码。
    • 查看日志,我发现“websocket:找不到带有令牌'websocket'的升级头”,我正在调查它。
    • 找到了,我错过了 tcp 的负载均衡器映射,映射是 SSL 到 tcp,一旦我启用它,一切正常,感谢 Mark,您的评论让我关注了这个问题。
    猜你喜欢
    • 2022-01-26
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2018-08-28
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    相关资源
    最近更新 更多