Создание веб-сокета с помощью golang в aws

Я пытаюсь создать веб-сокеты, используя 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"

Это моя конфигурация балансировщика нагрузки:

Конфигурация балансировки нагрузки


person WeldPad    schedule 03.02.2017    source источник


Ответы (1)


Я считаю, что это должно быть wss://www.weldpad.com/wss?, а не wss://https://www.weldpad.com/wss?

person Mark B    schedule 03.02.2017
comment
Я также пробовал, и ответ был: wsconnect.html соединение WebSocket с 'wss: //www.weldpad.com/wss' не удалось: ошибка во время рукопожатия WebSocket: неожиданный код ответа: 400 - person WeldPad; 04.02.2017
comment
Что ж, это гораздо лучшее сообщение об ошибке. Он получает ответ от сервера. Теперь вам нужно посмотреть на свой сервер, возможно, изучить журналы сервера и понять, почему он возвращает код 400. - person Mark B; 04.02.2017
comment
Просматривая журнал, я обнаружил websocket: не удалось найти заголовок обновления с токеном «websocket», я изучаю его. - person WeldPad; 04.02.2017
comment
Нашел, мне не хватало сопоставления балансировщика нагрузки для tcp, сопоставление SSL с tcp, как только я его включил, все заработало, спасибо, Марк, ваш комментарий сосредоточил меня на проблеме. - person WeldPad; 05.02.2017