// // main.go // Copyright (C) 2024 veypi // 2025-02-27 19:32:09 // Distributed under terms of the MIT license. // package main import ( "app/api" "app/api/project/stage" "app/cfg" "fmt" "log" "time" "github.com/nats-io/nats-server/v2/server" "github.com/nats-io/nats.go" "github.com/veypi/OneBD/rest" "github.com/veypi/utils/flags" "github.com/veypi/utils/logv" ) func main() { opts := &server.Options{ Host: "127.0.0.1", Port: 4222, NoLog: false, NoSigs: false, HTTPPort: 8222, // 监控端口 Websocket: server.WebsocketOpts{ Port: 9222, // 使用相同的端口 Host: "127.0.0.1", // WebSocket 主机 NoTLS: true, // 非 TLS WebSocket }, } // 创建并启动服务器 natsServer, err := server.NewServer(opts) if err != nil { log.Fatalf("无法创建 NATS 服务器: %v", err) } // 启动服务器 (以 goroutine 方式运行) go natsServer.Start() // 等待服务器启动 if !natsServer.ReadyForConnections(5 * time.Second) { log.Fatal("NATS 服务器无法在指定时间内启动") } fmt.Println("NATS 服务器已启动") // 示例:连接到刚刚启动的 NATS 服务器 nc, err := nats.Connect("nats://127.0.0.1:4222") if err != nil { log.Fatalf("无法连接到 NATS: %v", err) } defer nc.Close() nc1, err := nats.Connect("ws://127.0.0.1:9222") if err != nil { log.Fatalf("无法连接到 ws: %v", err) } defer nc1.Close() // 现在可以使用 nc 发布和订阅消息 fmt.Println("已成功连接到 NATS 服务器") if err := stage.InitGraphProcessor(); err != nil { log.Fatalf("Stage 图生成处理器初始化失败: %v", err) } log.Println("Stage 图生成处理器初始化成功.") var CMD = flags.New("app", "the backend server of app") CMD.Command = runWeb CMD.Parse() err = CMD.Run() if err != nil { logv.Warn().Msg(err.Error()) } } func runWeb() error { server, err := rest.New(rest.WithHost(cfg.Config.Host), rest.WithPort(cfg.Config.Port)) if err != nil { return err } // server.SetRouter(app.Router) // server.Router().Print() // return server.Run() server.Router().Extend("api", api.Router) server.Router().Print() return server.Run() }