Найти тему

Курс - «Программирование на Go для начинающих» - #18 Работа с сетью. Работа с WebSockets.

WebSockets предоставляют полнодуплексный канал связи между клиентом и сервером, что позволяет обмениваться сообщениями в реальном времени после установления соединения. В Go для работы с WebSockets часто используется сторонняя библиотека gorilla/websocket.

Установка библиотеки

Для начала установите библиотеку gorilla/websocket, выполнив следующую команду:

go get -u github.com/gorilla/websocket

Создание WebSocket-сервера

Давайте рассмотрим, как можно создать простой WebSocket-сервер, который принимает соединения и эхо-отправляет полученные сообщения обратно клиенту.

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:

<!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 позволяет создавать интерактивные веб-приложения и сервисы с высокой скоростью обмена данными между клиентом и сервером.

WebSockets  предоставляют полнодуплексный канал связи между клиентом и сервером, что  позволяет обмениваться сообщениями в реальном времени после  установления соединения.