package main import ( "flag" "fmt" "os" "os/signal" "syscall" "time" "github.com/noahlann/nnet/pkg/nnet" ) func main() { var ( addr = flag.String("addr", "tcp://:8080", "Server address") protocol = flag.String("protocol", "", "Transport protocol (tcp, udp, websocket, unix, serial). If empty, auto-detect from addr") multicore = flag.Bool("multicore", true, "Enable multicore") readBuf = flag.Int("read-buf", 4096, "Read buffer size") writeBuf = flag.Int("write-buf", 4096, "Write buffer size") maxConns = flag.Int("max-conns", 10000, "Max connections") // codec defaultCodec = flag.String("default-codec", "binary", "Default codec (binary, plain, json, msgpack, protobuf)") enableProtoEnc = flag.Bool("enable-proto-encode", false, "Enable protocol-level encode before codec") // metrics metricsEnable = flag.Bool("metrics-enable", false, "Enable metrics endpoint") metricsPort = flag.Int("metrics-port", 0, "Metrics HTTP port (0 disables separate port)") metricsPath = flag.String("metrics-path", "/metrics", "Metrics HTTP path") // session sessionStorage = flag.String("session-storage", "memory", "Session storage (memory|file|redis)") sessionPath = flag.String("session-path", "./sessions", "Session path for file storage") sessionExpiration = flag.Duration("session-expiration", 24*time.Hour, "Session expiration duration") ) flag.Parse() // 创建服务器配置 cfg := &nnet.Config{ Addr: *addr, TransportProtocol: *protocol, // 如果为空,会根据地址前缀自动识别 Multicore: *multicore, ReadBufferSize: *readBuf, WriteBufferSize: *writeBuf, MaxConnections: *maxConns, Metrics: &nnet.MetricsConfig{ Enabled: *metricsEnable, Path: *metricsPath, Port: *metricsPort, }, Session: &nnet.SessionConfig{ Storage: *sessionStorage, Expiration: *sessionExpiration, Path: *sessionPath, }, Codec: &nnet.CodecConfig{ DefaultCodec: *defaultCodec, EnableProtocolEncode: *enableProtoEnc, }, } // 创建服务器 server, err := nnet.NewServer(cfg) if err != nil { fmt.Printf("Failed to create server: %v\n", err) os.Exit(1) } // 注册路由 server.Router().RegisterString("/hello", func(ctx nnet.Context) error { return ctx.Response().WriteString("Hello, World!") }) server.Router().RegisterString("/ping", func(ctx nnet.Context) error { return ctx.Response().WriteString("pong") }) // 启动服务器 if err := server.Start(); err != nil { fmt.Printf("Failed to start server: %v\n", err) os.Exit(1) } defer server.Stop() fmt.Printf("Server started on %s\n", *addr) // 等待中断信号 sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) <-sigChan fmt.Println("Server stopped") }