feat: 将架构改成支持中间两个server
This commit is contained in:
@@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"flag"
|
||||
"log"
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
kcp "github.com/xtaci/kcp-go/v5"
|
||||
@@ -19,6 +20,9 @@ func main() {
|
||||
kcpTimestampDebugLogPath := flag.String("kcp-ts-debug-log", "", "optional JSONL file path for KCP packet kernel timestamp debug records")
|
||||
kcpSessionStatsLogPath := flag.String("kcp-session-stats-log", "", "optional JSONL file path for KCP session stats records")
|
||||
kcpSessionStatsInterval := flag.String("kcp-session-stats-interval", transport.DefaultKCPSessionStatsInterval.String(), "sampling interval for KCP session stats, for example 100ms")
|
||||
relayListenAddr := flag.String("relay-listen", "", "optional raw UDP relay listen address")
|
||||
relayPeerAddr := flag.String("relay-peer", "", "optional fixed raw UDP relay peer address")
|
||||
relayLearnPeer := flag.Bool("relay-learn-peer", false, "learn the relay peer address from the first inbound relay packet")
|
||||
flag.Parse()
|
||||
|
||||
statsInterval, err := transport.ParseKCPSessionStatsInterval(*kcpSessionStatsInterval)
|
||||
@@ -62,6 +66,40 @@ func main() {
|
||||
defer listener.Close()
|
||||
|
||||
hub := server.NewKCPHub(hubOptions...)
|
||||
|
||||
if *relayPeerAddr != "" && *relayListenAddr == "" {
|
||||
log.Fatal("flag -relay-listen is required when -relay-peer is set")
|
||||
}
|
||||
if *relayLearnPeer && *relayListenAddr == "" {
|
||||
log.Fatal("flag -relay-listen is required when -relay-learn-peer is set")
|
||||
}
|
||||
if *relayListenAddr != "" {
|
||||
relayConn, err := net.ListenPacket("udp", *relayListenAddr)
|
||||
if err != nil {
|
||||
log.Fatalf("listen relay udp on %s: %v", *relayListenAddr, err)
|
||||
}
|
||||
defer relayConn.Close()
|
||||
|
||||
var relayPeer net.Addr
|
||||
if *relayPeerAddr != "" {
|
||||
relayPeer, err = net.ResolveUDPAddr("udp", *relayPeerAddr)
|
||||
if err != nil {
|
||||
log.Fatalf("resolve relay peer %s: %v", *relayPeerAddr, err)
|
||||
}
|
||||
}
|
||||
|
||||
hub.SetRelaySocket(relayConn, relayPeer, *relayLearnPeer)
|
||||
go func() {
|
||||
if serveErr := hub.ServeRelay(); serveErr != nil {
|
||||
log.Printf("kcp relay loop ended: %v", serveErr)
|
||||
}
|
||||
}()
|
||||
log.Printf("kcp relay listening on %s", relayConn.LocalAddr())
|
||||
if relayPeer != nil {
|
||||
log.Printf("kcp relay peer configured as %s", relayPeer)
|
||||
}
|
||||
}
|
||||
|
||||
log.Printf("kcp server listening on %s", listener.Addr())
|
||||
|
||||
for {
|
||||
|
||||
Reference in New Issue
Block a user