Я пытаюсь создать веб-сокеты, используя golang с gorilla на aws (без докера) с балансировщиком нагрузки, у меня есть сертификат, подключенный к балансировщику нагрузки.
Мне удалось заставить код работать с 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())
}
Это подача:
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"
Это моя конфигурация балансировщика нагрузки: