package main import ( "log" "os" "os/signal" "syscall" "github.com/noahlann/nnet/pkg/nnet" ) // User 用户结构 type User struct { ID int `json:"id"` Name string `json:"name"` Age int `json:"age"` } // Response 响应结构 type Response struct { Code int `json:"code"` Message string `json:"message"` Data interface{} `json:"data"` } func main() { // 创建服务器配置 cfg := &nnet.Config{ Addr: "tcp://:6995", Codec: &nnet.CodecConfig{ DefaultCodec: "json", // 默认使用JSON编解码器 EnableProtocolEncode: false, // 不启用协议层编码 }, } // 创建服务器 server, err := nnet.NewServer(cfg) if err != nil { log.Fatal("Failed to create server:", err) } // 注册路由处理器 router := server.Router() // 示例1:写入字符串 router.RegisterString("hello", helloHandler) // 示例2:写入结构体(自动JSON编码) router.RegisterString("get_user", getUserHandler) // 示例3:写入数组 router.RegisterString("list_users", listUsersHandler) // 示例4:使用指定的编解码器 router.RegisterString("get_user_msgpack", getUserWithMsgpackHandler) // 启动服务器 log.Println("Starting server on :6995") log.Println("Try:") log.Println(" echo 'hello' | nc localhost 6995") log.Println(" echo 'get_user' | nc localhost 6995") log.Println(" echo 'list_users' | nc localhost 6995") log.Println(" echo 'get_user_msgpack' | nc localhost 6995") if err := server.Start(); err != nil { log.Fatal("Failed to start server:", err) } // 等待中断信号 quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit log.Println("Shutting down server...") if err := server.Stop(); err != nil { log.Fatal("Failed to stop server:", err) } } // helloHandler 写入字符串 func helloHandler(ctx nnet.Context) error { return ctx.Response().WriteString("Hello, World!\n") } // getUserHandler 返回单个用户(使用默认JSON编解码器) func getUserHandler(ctx nnet.Context) error { user := User{ ID: 1, Name: "Alice", Age: 25, } resp := Response{ Code: 200, Message: "success", Data: user, } // 自动使用JSON编码 return ctx.Response().Write(resp) } // listUsersHandler 返回用户列表 func listUsersHandler(ctx nnet.Context) error { users := []User{ {ID: 1, Name: "Alice", Age: 25}, {ID: 2, Name: "Bob", Age: 30}, {ID: 3, Name: "Charlie", Age: 35}, } resp := Response{ Code: 200, Message: "success", Data: users, } return ctx.Response().Write(resp) } // getUserWithMsgpackHandler 使用MessagePack编解码器 func getUserWithMsgpackHandler(ctx nnet.Context) error { user := User{ ID: 1, Name: "Alice", Age: 25, } resp := Response{ Code: 200, Message: "success", Data: user, } // 使用MessagePack编码 return ctx.Response().WriteWithCodec(resp, "msgpack") }