Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpWsCl 263 of 280 menu
◀ ▶

WebSocket-клиент в Go

Клиентская сторона не использует обычный просмотр страницы. Программа сама инициирует рукопожатие через готовый набор настроек соединения из того же модуля, что и на сервере, и получает объект канала, похожий на серверный.

Адрес записывают со схемой ws://, хостом и путем, как у HTTP, но без префикса http://. Для учебных примеров подойдет ws://127.0.0.1:8080/ws, если сервер уже слушает тот же порт и зарегистрировал путь /ws.

Сервер в фоне и клиент в main, который только открывает канал и закрывает его при выходе:

package main import ( "log" "net/http" "time" "github.com/gorilla/websocket" ) func wsServer() { upgrader := websocket.Upgrader{} http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err) return } defer conn.Close() }) log.Fatal(http.ListenAndServe("127.0.0.1:8080", nil)) } func main() { go wsServer() time.Sleep(20 * time.Millisecond) url := "ws://127.0.0.1:8080/ws" conn, _, err := websocket.DefaultDialer.Dial(url, nil) if err != nil { log.Fatal(err) } defer conn.Close() }

Вызов с набором по умолчанию возвращает соединение, ответ HTTP и ошибку. Третий результат можно не использовать, если заголовки ответа не нужны; закрытие канала ставят отложенным вызовом.

Тот же клиентский фрагмент без сервера в файле, если проверку делаете второй программой:

package main import ( "log" "github.com/gorilla/websocket" ) func main() { url := "ws://127.0.0.1:8080/ws" conn, _, err := websocket.DefaultDialer.Dial(url, nil) if err != nil { log.Fatal(err) } defer conn.Close() }

Дан адрес канала:

url := "ws://127.0.0.1:8080/ws"

Напишите полный main.go, который откроет url через набор по умолчанию модуля github.com/gorilla/websocket и закроет канал отложенным вызовом.

Дано сообщение об ошибке при открытии:

conn, _, err := websocket.DefaultDialer.Dial(url, nil) if err != nil { log.Fatal(err) }

Скажите, при какой типичной причине клиент увидит ошибку, если сервер еще не слушает 127.0.0.1:8080.

Скажите, чем адрес ws://127.0.0.1:8080/ws отличается от http://127.0.0.1:8080/ws для клиента модуля gorilla.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить