Files
qgo-server/main.go
Smile Rex adc6341b90
Some checks failed
Create and publish a Docker image 🚀 / build-and-push-image (push) Has been cancelled
add certs 1
2026-03-10 01:52:52 +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)
}
}