我用 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
。
要在 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);