通过 websocket 发送 STOMP 帧

Posted

技术标签:

【中文标题】通过 websocket 发送 STOMP 帧【英文标题】:Sending a STOMP frame through websocket 【发布时间】:2017-11-10 16:41:51 【问题描述】:

由于任何地方都没有 webstomp(通过 Websocket STOMP)C++ 实现,我正在开发自己的。我已经设置了一个 webstomp 服务器,并且我已经确认它可以使用 webstomp 的 javascript 实现来工作。

现在我依赖于 QT 的 websocket 实现。我测试并使用了常规的 websocket。所以现在是 STOMP 的实现。查看 STOMP 帧,我必须发送的第一帧可能是这样的:

CONNECT
login: <username>
passcode: <passcode>

^@

^@ 是空字符。我遇到的问题是,无论我做什么,我似乎都无法从服务器获得 任何 类型的响应。我尝试了不同的编码、不同的消息、不同的连接帧等。我想知道我是不是做错了什么或者我错过了什么。上述框架的示例如下所示:

void WebSTOMP::onConnected()

    if (m_debug)
        qDebug() << "WebSocket connected";
    connect(&m_webSocket, &QWebSocket::textMessageReceived,
            this, &EchoClient::onTextMessageReceived);
    std::string myMessage = "CONNECT \nlogin: test\npasscode : test\n\n\0";

    m_webSocket.sendTextMessage(QString::fromUtf8(myMessage.c_str()));

然后我再也没有得到回复。

提前致谢 =)

【问题讨论】:

有趣的是,我正在谷歌搜索 Websocket 并找到你的 github,然后来到这里。我想知道 3 年后是否有现成的实现,可能使用 boost::beast websocket? 【参考方案1】:

由于字符串的空字符终止符,消息的长度加一

【讨论】:

【参考方案2】:

解决了。未来:由于包含空字符终止符,必须手动指定长度。

【讨论】:

以上是关于通过 websocket 发送 STOMP 帧的主要内容,如果未能解决你的问题,请参考以下文章

引入sleuth依赖导致websocket 发送 STOMP 消息失败

引入sleuth依赖导致websocket 发送 STOMP 消息失败

Spring WebSockets 运行时监控 STOMP 帧 - 解释

通过 spring websocket、sockJs 和 STOMP 向经过身份验证的用户发送通知

stomp.js websocket广播模式

如何使用 Spring WebSocket 向 STOMP 客户端发送错误消息?