fix: 客户端和网关只能通过长连接方式通信,移除 HTTP 注册端点
This commit is contained in:
@@ -19,10 +19,6 @@ func main() {
|
||||
log.Fatalf("Failed to load config: %v", err)
|
||||
}
|
||||
|
||||
// 创建 WebSocket Hub
|
||||
hub := ws.NewHub()
|
||||
go hub.Run()
|
||||
|
||||
// 初始化用户服务
|
||||
userService, err := service.NewUserService(cfg)
|
||||
if err != nil {
|
||||
@@ -30,6 +26,10 @@ func main() {
|
||||
}
|
||||
logger.Info("User service initialized successfully")
|
||||
|
||||
// 创建 WebSocket Hub
|
||||
hub := ws.NewHub(userService)
|
||||
go hub.Run()
|
||||
|
||||
// 创建路由器
|
||||
r := router.NewRouter(hub, userService)
|
||||
|
||||
@@ -38,7 +38,6 @@ func main() {
|
||||
log.Printf("Gateway service starting on %s", serverAddr)
|
||||
log.Printf("WebSocket endpoint: ws://localhost%s/ws", serverAddr)
|
||||
log.Printf("Health check: http://localhost%s/health", serverAddr)
|
||||
log.Printf("User register endpoint: http://localhost%s/api/user/register", serverAddr)
|
||||
|
||||
if err := http.ListenAndServe(serverAddr, r.SetupRoutes()); err != nil {
|
||||
log.Fatalf("Failed to start server: %v", err)
|
||||
|
||||
@@ -41,64 +41,10 @@ func (r *Router) SetupRoutes() http.Handler {
|
||||
// 健康检查
|
||||
mux.HandleFunc("/health", r.handleHealth)
|
||||
|
||||
// 用户注册
|
||||
mux.HandleFunc("/api/user/register", r.handleRegister)
|
||||
|
||||
return mux
|
||||
}
|
||||
|
||||
// 注册请求结构
|
||||
type registerRequest struct {
|
||||
Account string `json:"account"`
|
||||
Password string `json:"password"`
|
||||
}
|
||||
|
||||
// 注册响应结构
|
||||
type registerResponse struct {
|
||||
UserID string `json:"user_id"`
|
||||
Account string `json:"account"`
|
||||
Message string `json:"message"`
|
||||
Code int `json:"code"`
|
||||
}
|
||||
|
||||
// handleRegister 处理用户注册请求
|
||||
func (r *Router) handleRegister(w http.ResponseWriter, req *http.Request) {
|
||||
if req.Method != http.MethodPost {
|
||||
w.WriteHeader(http.StatusMethodNotAllowed)
|
||||
w.Write([]byte(`{"code": 405, "message": "Method not allowed"}`))
|
||||
return
|
||||
}
|
||||
|
||||
// 解析请求体
|
||||
var registerReq registerRequest
|
||||
if err := json.NewDecoder(req.Body).Decode(®isterReq); err != nil {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
w.Write([]byte(`{"code": 400, "message": "Invalid request body"}`))
|
||||
return
|
||||
}
|
||||
|
||||
// 调用用户服务注册
|
||||
resp, err := r.userService.Register(req.Context(), registerReq.Account, registerReq.Password)
|
||||
if err != nil {
|
||||
log.Printf("Register failed: %v", err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
w.Write([]byte(`{"code": 500, "message": "Internal server error"}`))
|
||||
return
|
||||
}
|
||||
|
||||
// 构造响应
|
||||
response := registerResponse{
|
||||
UserID: resp.UserId,
|
||||
Account: resp.Account,
|
||||
Message: resp.Response.Message,
|
||||
Code: int(resp.Response.Code),
|
||||
}
|
||||
|
||||
// 返回响应
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
json.NewEncoder(w).Encode(response)
|
||||
}
|
||||
|
||||
func (r *Router) handleWebSocket(w http.ResponseWriter, req *http.Request) {
|
||||
conn, err := upgrader.Upgrade(w, req, nil)
|
||||
|
||||
@@ -133,7 +133,64 @@ func (c *Client) handleCommand(msg *Message) {
|
||||
// 这里可以根据命令类型执行不同的操作
|
||||
log.Printf("Received command: %v", msg.Data)
|
||||
|
||||
// 示例:回复命令执行结果
|
||||
// 检查是否是注册命令
|
||||
if cmdData, ok := msg.Data.(map[string]interface{}); ok {
|
||||
if cmdType, ok := cmdData["type"].(string); ok && cmdType == "register" {
|
||||
// 提取注册信息
|
||||
account, accountOk := cmdData["account"].(string)
|
||||
password, passwordOk := cmdData["password"].(string)
|
||||
|
||||
if !accountOk || !passwordOk {
|
||||
// 回复错误信息
|
||||
errorResponse := &Message{
|
||||
Type: MessageTypeError,
|
||||
Content: "Invalid register command: missing account or password",
|
||||
}
|
||||
c.send <- errorResponse
|
||||
return
|
||||
}
|
||||
|
||||
// 调用用户服务注册
|
||||
if c.hub.userService != nil {
|
||||
// 异步调用用户服务注册
|
||||
go func() {
|
||||
resp, err := c.hub.userService.Register(nil, account, password)
|
||||
if err != nil {
|
||||
// 回复错误信息
|
||||
errorResponse := &Message{
|
||||
Type: MessageTypeError,
|
||||
Content: "Register failed: " + err.Error(),
|
||||
}
|
||||
c.send <- errorResponse
|
||||
return
|
||||
}
|
||||
|
||||
// 回复成功信息
|
||||
successResponse := &Message{
|
||||
Type: MessageTypeText,
|
||||
Content: "Register successful",
|
||||
Data: map[string]interface{}{
|
||||
"user_id": resp.UserId,
|
||||
"account": resp.Account,
|
||||
"message": resp.Response.Message,
|
||||
"code": resp.Response.Code,
|
||||
},
|
||||
}
|
||||
c.send <- successResponse
|
||||
}()
|
||||
} else {
|
||||
// 回复错误信息
|
||||
errorResponse := &Message{
|
||||
Type: MessageTypeError,
|
||||
Content: "User service not available",
|
||||
}
|
||||
c.send <- errorResponse
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 其他命令处理
|
||||
response := &Message{
|
||||
Type: MessageTypeText,
|
||||
Content: "Command executed successfully",
|
||||
|
||||
@@ -2,6 +2,8 @@ package ws
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"backend/gateway/internal/service"
|
||||
)
|
||||
|
||||
type Hub struct {
|
||||
@@ -16,14 +18,18 @@ type Hub struct {
|
||||
|
||||
// 注销请求
|
||||
unregister chan *Client
|
||||
|
||||
// 用户服务
|
||||
userService *service.UserService
|
||||
}
|
||||
|
||||
func NewHub() *Hub {
|
||||
func NewHub(userService *service.UserService) *Hub {
|
||||
return &Hub{
|
||||
broadcast: make(chan *Message),
|
||||
register: make(chan *Client),
|
||||
unregister: make(chan *Client),
|
||||
clients: make(map[*Client]bool),
|
||||
userService: userService,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user