You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用go-stomp/stomp/v3搭建STOMP服务器时遇Socket hang up错误求助

问题分析与解决

问题原因

服务器日志的invalid command错误,说明客户端发送的初始数据不符合STOMP协议规范。结合你代码里错误的"WebSocket server error"注释,大概率是客户端用了WebSocket方式连接,但你的服务器是基于纯TCP的STOMP服务——github.com/go-stomp/stomp/v3/server的Serve方法默认处理STOMP over TCP协议,不支持WebSocket,客户端用WebSocket连接会发送HTTP握手数据,服务器无法识别为STOMP命令,因此报错。

另外你的代码还有两处疏漏:

  • 忽略了net.Listen的错误,端口占用等启动问题无法及时暴露
  • 错误日志里的"WebSocket server error"描述错误,和实际的TCP STOMP服务器不符

解决方案

1. 修正服务器代码

修复错误处理与日志描述,确保服务器可靠启动:

package main

import (
    "fmt"
    "log"
    "net"
    "sync"

    "github.com/go-stomp/stomp/v3/server"
)

func main() {
    addr := ":61613"
    // 必须处理Listen的错误
    l, err := net.Listen("tcp", addr)
    if err != nil {
        log.Fatalf("Failed to listen on %s: %v", addr, err)
    }
    defer l.Close()

    var wg sync.WaitGroup

    wg.Add(1)
    go func() {
        defer wg.Done()
        err := server.Serve(l)
        if err != nil {
            // 修正日志描述为STOMP服务器错误
            log.Fatalf("STOMP server error: %v", err)
        }
    }()

    fmt.Printf("STOMP server is running on port %s. Press Ctrl+C to stop...\n", addr)
    wg.Wait()

    fmt.Println("STOMP server has been shut down")
}

2. 使用正确的STOMP客户端

必须用支持STOMP over TCP的客户端连接,比如用同库的客户端示例测试:

package main

import (
    "log"

    "github.com/go-stomp/stomp/v3"
)

func main() {
    conn, err := stomp.Dial("tcp", "localhost:61613")
    if err != nil {
        log.Fatalf("Failed to connect: %v", err)
    }
    defer conn.Disconnect()

    log.Println("Connected successfully")
}

3. 若需支持WebSocket

如果你确实需要WebSocket版本的STOMP服务器,需自行处理WebSocket握手,再将连接转换为STOMP协议。可以借助net/http和github.com/gorilla/websocket库实现:

  • 创建HTTP服务器,处理WebSocket升级请求
  • 将升级后的WebSocket连接封装为net.Conn接口(可通过gorilla/websocket.Conn的UnderlyingConn()获取底层TCP连接,或自行实现适配)
  • 将封装后的连接交给server.HandleConn处理

验证步骤

  1. 启动修正后的服务器
  2. 运行TCP STOMP客户端代码,此时应能成功连接,不再出现"Socket hang up"和"invalid command"错误

内容的提问来源于stack exchange,提问作者hideous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 19:45:25