Update main.go
This commit is contained in:
74
main.go
74
main.go
@@ -14,52 +14,42 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 1. Настройка TLS (обязательно для WebTransport/QUIC)
|
||||
// Поскольку SSL терминация на VPS, здесь мы используем самоподписанный сертификат
|
||||
// для внутренней связи (Dokploy <-> Caddy). Nixpacks соберет это.
|
||||
// Но для простоты примера мы просто слушаем обычный HTTP, так как Caddy проксирует.
|
||||
// ОДНАКО: WebTransport ТРЕБУЕТ TLS. Внутренний TLS тоже нужен.
|
||||
// Мы сгенерируем его на лету, чтобы не возиться с файлами.
|
||||
// Генерируем сертификат для внутреннего TLS (Caddy -> Go)
|
||||
cert, err := generateSelfSignedCert()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
cert, err := generateSelfSignedCert()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
tlsConfig := &tls.Config{
|
||||
Certificates: []tls.Certificate{cert},
|
||||
NextProtos: []string{"h3"},
|
||||
}
|
||||
|
||||
tlsConfig := &tls.Config{
|
||||
Certificates: []tls.Certificate{cert},
|
||||
NextProtos: []string{"h3"}, // HTTP/3
|
||||
}
|
||||
server := webtransport.Server{
|
||||
H3: http3.Server{
|
||||
Addr: ":9001", // МЕНЯЕМ ПОРТ ЗДЕСЬ
|
||||
TLSConfig: tlsConfig,
|
||||
},
|
||||
CheckOrigin: func(r *http.Request) bool { return true },
|
||||
}
|
||||
|
||||
// 2. Настройка WebTransport Handler
|
||||
server := webtransport.Server{
|
||||
H3: http3.Server{
|
||||
Addr: ":8080", // Порт внутри контейнера
|
||||
TLSConfig: tlsConfig,
|
||||
},
|
||||
CheckOrigin: func(r *http.Request) bool { return true }, // Разрешить все Origin для теста
|
||||
}
|
||||
// Раздаем index.html
|
||||
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||
http.ServeFile(w, r, "index.html")
|
||||
})
|
||||
http.HandleFunc("/wt", func(w http.ResponseWriter, r *http.Request) {
|
||||
log.Println("New WebTransport request from:", r.RemoteAddr)
|
||||
sess, err := server.Upgrade(w, r)
|
||||
if err != nil {
|
||||
log.Printf("Upgrade failed: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Обработка сессии в отдельной горутине
|
||||
go handleSession(sess)
|
||||
})
|
||||
// Раздаем статику и вешаем обработчик WT
|
||||
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||
http.ServeFile(w, r, "index.html")
|
||||
})
|
||||
|
||||
log.Println("WebTransport server listening on https://localhost:8080/wt (via Caddy)")
|
||||
// Запускаем HTTP/3 сервер
|
||||
if err := server.ListenAndServe(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
http.HandleFunc("/wt", func(w http.ResponseWriter, r *http.Request) {
|
||||
sess, err := server.Upgrade(w, r)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
go handleSession(sess)
|
||||
})
|
||||
|
||||
log.Println("WebTransport server started on :9001")
|
||||
if err := server.ListenAndServe(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
// Обработка одной WebTransport сессии
|
||||
|
||||
Reference in New Issue
Block a user