Files
ping-helper/main.go

63 lines
2.4 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// File: ping-helper/main.go
package main
import (
"log"
"net/http"
"github.com/gorilla/websocket"
)
// upgrader "проапгрейдит" обычный HTTP-запрос до постоянного WebSocket-соединения.
var upgrader = websocket.Upgrader{
// CheckOrigin позволяет нам контролировать, с каких доменов можно подключаться.
// Для простоты мы разрешим все подключения, так как Caddy будет нашим фронтом.
CheckOrigin: func(r *http.Request) bool {
return true
},
}
// handleConnections - это обработчик для каждого нового WebSocket-соединения.
func handleConnections(w http.ResponseWriter, r *http.Request) {
// Апгрейдим HTTP до WebSocket
ws, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Printf("error upgrading connection: %v", err)
return
}
// Важно закрыть соединение, когда функция завершится
defer ws.Close()
log.Println("Client connected")
// Бесконечный цикл для чтения сообщений от клиента
for {
// Читаем сообщение. Нам не важен тип, только содержимое (p).
_, p, err := ws.ReadMessage()
if err != nil {
// Если клиент закрыл соединение, будет ошибка, это нормально.
log.Printf("error reading message: %v", err)
break // Выходим из цикла, что приведет к закрытию соединения
}
// Отправляем полученное сообщение обратно клиенту (эхо)
if err := ws.WriteMessage(websocket.TextMessage, p); err != nil {
log.Printf("error writing message: %v", err)
break
}
}
log.Println("Client disconnected")
}
func main() {
// Регистрируем наш обработчик для пути /ws/ping
// Caddy будет проксировать запросы с platform.mrixs.me/ws/ping на этот путь.
http.HandleFunc("/ws/ping", handleConnections)
// Запускаем сервер на порту 8081, как мы указали в Caddyfile
log.Println("Starting ping-helper server on :8081")
if err := http.ListenAndServe(":8081", nil); err != nil {
log.Fatalf("Failed to start server: %v", err)
}
}