45 lines
1.0 KiB
Go
45 lines
1.0 KiB
Go
package main
|
||
|
||
import (
|
||
"ChatRoom/internal/rabbitmq"
|
||
"ChatRoom/internal/ws"
|
||
"log"
|
||
"net/http"
|
||
"os"
|
||
"path/filepath"
|
||
)
|
||
|
||
func main() {
|
||
// 1. 初始化 RabbitMQ
|
||
rabbitmqURL := os.Getenv("RABBITMQ_URL")
|
||
if rabbitmqURL == "" {
|
||
rabbitmqURL = "amqp://guest:guest@localhost:5672/"
|
||
}
|
||
rmq, err := rabbitmq.NewClient(rabbitmqURL)
|
||
if err != nil {
|
||
log.Fatalf("RabbitMQ 连接失败: %v", err)
|
||
}
|
||
defer rmq.Close()
|
||
|
||
// 2. WebSocket 路由
|
||
http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
|
||
ws.NewConnection(w, r, rmq) // 传入 RabbitMQ 客户端
|
||
})
|
||
|
||
// 3. 静态文件服务(用于测试前端)
|
||
webDir := "./web"
|
||
if _, err := os.Stat(webDir); os.IsNotExist(err) {
|
||
// 从 cmd/server 目录运行时,web 在项目根目录
|
||
webDir = filepath.Join("..", "..", "web")
|
||
}
|
||
http.Handle("/", http.FileServer(http.Dir(webDir)))
|
||
|
||
// 4. 启动服务
|
||
port := os.Getenv("PORT")
|
||
if port == "" {
|
||
port = "8080"
|
||
}
|
||
log.Printf("服务启动: http://localhost:%s", port)
|
||
log.Fatal(http.ListenAndServe(":"+port, nil))
|
||
}
|