无法使用 WebSockets 从已部署的 Node.js 服务器中使用 Qt 检索数据

问题描述 投票:0回答:1

我用 JavaScript 编写了一个简单的服务器示例,当客户端连接时,它会向客户端发送一些数据:send-gravity-from-server-to-client-box2d-wasm-js

我在免费托管上部署了这个简单的服务器:https://glitch.com/https://render.com/。网络客户端运行良好:

(Glitch需要15-20秒,Render需要50秒才能唤醒服务器)

我尝试从 Qt 连接到服务器并显示收到的数据:

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    connect(&m_webSocket, &QWebSocket::connected, this, &Widget::onConnected);
    connect(&m_webSocket, &QWebSocket::textMessageReceived,
            this, &Widget::onMessageReceived);
    connect(&m_webSocket, &QWebSocket::errorOccurred,
            this, &Widget::errorOccurred);

    // QUrl url("wss://send-gravity-box2d-wasm-js.onrender.com");
    QUrl url("wss://merciful-regal-soursop.glitch.me");
    m_webSocket.open(url);
}

Widget::~Widget() {}

void Widget::onConnected()
{
    qDebug() << "connected";
}

void Widget::onMessageReceived(const QString &message)
{
    qDebug() << message;
}

void Widget::errorOccurred(QAbstractSocket::SocketError error)
{
    qDebug() << error;
}

我明白了:

connected
QAbstractSocket::RemoteHostClosedError
QAbstractSocket::RemoteHostClosedError

在 Qt 调试控制台中,当我尝试连接到 Render 时,当我尝试连接到 Glitch 时,我会看到

QAbstractSocket::ConnectionRefusedError

c++ qt websocket
1个回答
0
投票

要在 Glitch 上解决这个问题(我还没有在渲染器上测试过),你应该在 Web 客户端上知道

User-Agent
,如下所示:

console.log(window.navigator.userAgent);

将上面生成的字符串值复制并粘贴到

setRawHeader()
方法的第二个参数中:

    QUrl url("wss://merciful-regal-soursop.glitch.me");

    QNetworkRequest request;
    request.setUrl(url);
    request.setRawHeader(QByteArray("User-Agent"), QByteArray(""));

    m_webSocket.open(request);
© www.soinside.com 2019 - 2024. All rights reserved.