Files
qgo-server/main.go
Smile Rex 6a6c4ba9ee
All checks were successful
Create and publish a Docker image 🚀 / build-and-push-image (push) Successful in 1m23s
add certs
2026-03-10 01:33:54 +03:00

64 lines
1.5 KiB
Go
Raw 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.
package main
import (
"context"
"fmt"
"log"
"net/http"
"github.com/quic-go/quic-go/http3"
"github.com/quic-go/webtransport-go"
)
func main() {
// 1. Создаем WebTransport Server
wt := &webtransport.Server{
CheckOrigin: func(r *http.Request) bool { return true },
}
mux := http.NewServeMux()
mux.HandleFunc("/chat", func(w http.ResponseWriter, r *http.Request) {
// 2. Апгрейд соединения до WebTransport
session, err := wt.Upgrade(w, r)
if err != nil {
log.Printf("Upgrade error: %v", err)
return
}
go handleChatSession(session)
})
// 3. Настройка HTTP/3 сервера
// В современных версиях quic-go/http3 достаточно передать Handler,
// который внутри вызывает wt.Upgrade
server := http3.Server{
Addr: ":8080",
Handler: mux,
}
fmt.Println("WebTransport (HTTP/3) Server started on :8080")
// 4. Запуск с TLS (обязательно для HTTP/3)
// Для теста в Swarm используйте свои cert.pem и key.pem
err := server.ListenAndServeTLS("qgo.quizer.space.pem", "qgo.quizer.space-key.pem")
if err != nil {
log.Fatal(err)
}
}
func handleChatSession(session *webtransport.Session) {
for {
stream, err := session.AcceptStream(context.Background())
if err != nil {
return
}
go func(s webtransport.Stream) {
defer s.Close()
buf := make([]byte, 1024)
n, _ := s.Read(buf)
fmt.Printf("Message: %s\n", string(buf[:n]))
s.Write([]byte("Server: OK"))
}(*stream)
}
}