Курс — «Программирование на Go для начинающих» — #18 Работа с сетью. Работа с WebSockets.
Здравствуйте, дорогие друзья.
WebSockets предоставляют полнодуплексный канал связи между клиентом и сервером, что позволяет обмениваться сообщениями в реальном времени после установления соединения. В Go для работы с WebSockets часто используется сторонняя библиотека gorilla/websocket
.
Установка библиотеки
Для начала установите библиотеку gorilla/websocket
, выполнив следующую команду:
go get -u github.com/gorilla/websocket
Создание WebSocket-сервера
Давайте рассмотрим, как можно создать простой WebSocket-сервер, который принимает соединения и эхо-отправляет полученные сообщения обратно клиенту.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
package main import ( "fmt" "net/http" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true // Разрешить соединения от любого источника }, } func echoHandler(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) // Обновляем HTTP-соединение до WebSocket-соединения if err != nil { fmt.Println("Ошибка при установлении WebSocket-соединения:", err) return } defer conn.Close() for { messageType, message, err := conn.ReadMessage() if err != nil { fmt.Println("Ошибка при чтении сообщения:", err) break } fmt.Printf("Получено сообщение: %s\n", message) if err := conn.WriteMessage(messageType, message); err != nil { fmt.Println("Ошибка при отправке сообщения:", err) break } } } func main() { http.HandleFunc("/echo", echoHandler) fmt.Println("WebSocket-сервер запущен на http://localhost:8080/echo") http.ListenAndServe(":8080", nil) } |
Создание WebSocket-клиента
WebSocket-клиент может быть реализован на разных языках и платформах. В качестве примера рассмотрим, как отправить сообщение на WebSocket-сервер с использованием JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<!DOCTYPE html> <html> <head> <title>WebSocket Клиент</title> </head> <body> <script type="text/javascript"> var ws = new WebSocket("ws://localhost:8080/echo"); ws.onopen = function() { console.log("Соединение установлено."); ws.send("Привет, сервер!"); }; ws.onmessage = function(event) { console.log("Получено сообщение: " + event.data); }; ws.onclose = function(event) { if (event.wasClean) { console.log("Соединение закрыто чисто"); } else { console.log("Обрыв соединения"); } console.log('Код: ' + event.code + ' причина: ' + event.reason); }; ws.onerror = function(error) { console.log("Ошибка " + error.message); }; </script> </body> </html> |
Этот базовый пример демонстрирует, как установить соединение с WebSocket-сервером, отправить сообщение и обработать входящие сообщения или ошибки.
Использование WebSockets позволяет создавать интерактивные веб-приложения и сервисы с высокой скоростью обмена данными между клиентом и сервером.
На этом все. Всем хорошего дня!
Цикл статей по курсу: «Язык программирования Go для начинающих».