|
|
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")
|
|
|
}
|