问题标签 [qtwebsockets]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
461 浏览

multithreading - Qt Websocket同时处理多个请求

我的应用程序基于 Qt websocket 示例(http://doc.qt.io/qt-5/qtwebsockets-echoserver-example.html)。在我的应用程序中,大约有 20 个用户连接到 websocket 服务器,有些用户正在发送一些兆字节的消息。

我注意到,虽然 websocket 服务器正在接收这些大消息(可能需要几秒钟或几分钟),但它会完全阻止/排队所有其他请求或来自其他客户端的连接。

是否有任何推荐的设计如何解决这个问题?谢谢

0 投票
2 回答
1472 浏览

c++ - 如何在 Qt 中修改 QWebsocket 定时器

我有一个简单的客户端应用程序(使用QWebSocket),它想要连接到我的服务器应用程序(即QWebSocketServer)。

当我打开与关闭/不可用的 webSocketServer 的连接时,我的 webSocket 会在 30 秒后触发“断开连接”信号。

这很好,因为它可以帮助我了解服务器已关闭/不可用,因此我可以重试或警告用户该问题。

如果客户端和服务器之间的链接失败,也会发生同样的事情。即,在将 (sendBinaryMessage) 写入 webSocket 后,会在 30 秒后触发断开连接的信号。

我想知道默认计时器是什么QWebSocket以及如何修改它们?

我在哪里可以找到这样的信息/文件?webSockets 上的 Qt 文档根本没有提到这种行为!我应该阅读代码还是...?!

提前致谢

0 投票
0 回答
1271 浏览

qt - 使用 QWebSocket 创建的安全 websocket 连接被拒绝

QWebSocket 与 C++ 的连接有问题。

我收到 3 个错误,然后断开连接,但从不连接。

调用槽:错误
QAbstractSocket::RemoteHostClosedError
调用槽:错误
QAbstractSocket::ConnectionRefusedError
调用槽:错误
QAbstractSocket::RemoteHostClosedError
调用槽:断开连接

当我在令牌中输入一个小错字(以测试身份验证是否正常)时,我开始接收只有 QAbstractSocket::ConnectionRefusedError 错误。

最有趣的部分是我已经用python实现了websocket连接并且效果很好,所以问题不应该来自websocket服务器部分,或者请求头设置:

这个 websocket 连接是我的 c++ sdk 的一部分,所以我需要用 c++ 实现它。您对我在 C++ 代码中遗漏的内容有任何想法吗?

0 投票
1 回答
1874 浏览

qt - QML 中基于 WebSockets 的 Qt WebView 和 WebChannel

我想从在WebView中运行的 HTML 页面访问QtObject - 调用方法、读/写属性等。

据我了解,我需要在 QML 和 HTML 端之间建立WebSockets连接,然后将其用作WebChannel的传输。

不要将 WebView 与WebEngineView混淆——我知道如何用 WebEngineView 来做,但我需要用 WebView 来做。

所以,这就是我所拥有的。

QML 端

HTML 端

简单的消息交换工作正常(socket.send()),所以传输没问题,但是如何将 WebChannel 分配给 WebView?使用 WebEngineView 很简单,那里有一个webChannel属性(甚至不需要使用 WebSockets),但在 WebView 中没有任何相似之处。我的意思是,必须告诉 WebView WebChannel 包含我的 QtObject 以便对 JS 可见?

如果 WebView 不支持 WebChannel(?),那么如何使用外部浏览器呢?这个例子表明使用 C++ 是可能的,但我想用 QML 来做。

我使用 Qt 5.11.1。

0 投票
2 回答
1401 浏览

c++ - Qt QWebsocket::open 阻塞用户界面

我正在开发一个小型系统,它由几个客户和一个管理应用程序组成。每个客户端都有一个 QWebSocket 服务器来监听管理员的请求,因此管理员应用程序需要连接到不同的客户端。

这是我的登录对话框:

登录对话框

在登录之前,我不知道哪个是客户端 IP 地址,因此每次发送登录凭据时,我都需要尝试打开与该 IP 地址的连接。问题是在 Windows UI 中阻塞直到套接字服务器响应或超时,但在 Windows 中它工作正常。

编辑 1:我遵循了Tung Le Thanh的建议,因此代码中包含了他的提示。现在的主要问题是如果ConnectionHelper没有获得QSocketNotifier 就无法发出任何信号:Socket notifiers cannot be enabled or disabled from another thread

我有一个ConnectionHelper负责将接收数据发送到 WebSocket setver 和从 WebSocket setver 发送接收数据。

主文件

LoginDialog 的构造函数:

已接受的插槽:

我确实禁用“确定”按钮,直到收到任何响应并且在 Linux 上工作正常,但在 Windows 中,整个 UI 块并且在收到响应之前变得无响应。

我也尝试将ConnectionHelper实例移动到另一个线程,但我得到了这个响应:QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread

我没有想法,我需要找到一种方法来进行webSocket->open(url)异步或类似的事情。

谢谢。

0 投票
0 回答
255 浏览

qt - WebSocket QML 类型是否有 ping/pong 系统

WebSocket QML 类型是否支持任何 ping/pong 系统?

文档没有说明它,所以我想知道是否有一种“模拟”的方法ping/pong,例如尝试使用其中一种send方法并检查共同响应received信号中返回的内容?

或者我应该使用QWebSocket 类来实现它?另外,保留QML WebSocket发送/接收功能,而仅将类用于 ping/pong 目的,那么最好只在类中实现整个功能?

0 投票
1 回答
441 浏览

c++ - 为什么我不能将 QWebsocket::error SIGNAL 连接到 lambda 或具有相同签名的任何其他 SLOT 类型?QT5.9

我正在尝试构建一个实现 QWebSocket 的简单程序,但是,我首先尝试做的是检查连接是否启用。它没有抛出任何异常,因为我从未连接过错误信号,但我可以检查我的云服务器是否进行了任何连接尝试,并看到连接从未发生过。所以我尝试实现错误信号以查看问题的原因是什么,但我似乎无法使信号连接到我的打印功能。我的意思是我总是得到一个编译时错误。如果有人对我应该如何处理这个有任何想法,请说出来!

我也试过这样。我没有得到任何编译时错误,但是我得到了这个运行时错误:

下面是3张图片来说明问题:

主文件: 图 1

错误信息: 图 2

自定义打印机类: 图 3

还要忽略“qDebug()<<”“<error();” 行现在已评论。

这是我得到的错误”

0 投票
2 回答
636 浏览

c++ - 使用连接的套接字终止 QWebSocketServer

我调试用 C++/Qt 5.12.1 编写的控制台多线程应用程序。它在 Linux Mint 18.3 x64 上运行。

这个应用程序有SIGINT处理程序QWebSocketServerQWebSocket表格。它使用close() QWebSocketServer并调用abort()/ deleteLater()forQWebSocket表中的项目来处理终止。

如果 websocket 客户端连接到这个控制台应用程序,那么终止会因为一些正在运行的线程而失败(我想它是内部QWebSocket线程)。如果没有连接,则终止成功。

如何解决?让应用程序优雅地退出。

0 投票
1 回答
298 浏览

javascript - 使用 Qt runJavaScript 函数访问 Javascript 类对象

由于我是 javascript/HTML 新手,最近我开始使用 Qt QWebEngineView 进行项目。一段时间以来,我一直在寻找将数据从 C++ 程序共享到 Javascript 的最佳方法。到目前为止,我能够将数据发送到 Javascript 程序的唯一方法是使用该QWebEnginePage::runJavaScript函数。我也看到有使用这里QWebChannels描述的可能性,但我更喜欢它的简单性。QWebEnginePage::runJavaScript

到目前为止,我使用该runJavaScript方法遇到的唯一问题是,为了编写一个变量,这需要在 HTML 文件中定义,我实际上不是 100% 确定这是否是唯一的方法,但是这是它对我有用的唯一方法。我目前的情况是这样的:

在 HTML 文件中:

在 C++ 文件中:

使用此设置,我可以从 C++ 代码在 Javascript/HTML 端编写变量。因为使用此解决方案,我需要在 HTML 文件中为要发送的每个值创建尽可能多的单独变量,所以我想问是否可以使用类对象或 JavaScript 对象来代替使用单独的变量。我创建了一个类,其中包含一些方法来编写类成员,如下所示: 在 js 文件中:

使用此解决方案,如果我创建PositionState类的对象并从 javascript 文件中调用函数obj.setPosition(44,10.45),则对象的类成员设置正确,但是如果我从 C++ 尝试它,我会遇到一些错误。

如果只obj在 Javascript 文件中定义,我会得到错误js: Uncaught ReferenceError: obj is not defined。如果我在 HTML 文件中定义一个变量Id="obj"并运行相同的脚本,我会收到错误js: Uncaught TypeError: obj.setPosition is not a function,即使obj.setPosition我使用的是错误,也会发生错误document.getElementById('obj').setPosition

因此,对于我几乎没有 HTML/Javascript 知识的情况来说,HTML 文件不知道我的类定义,因此无法识别该setPosition方法。所以我的问题是是否有办法从 C++ 代码编写类对象。

我还尝试使用类似 JavaScript 的对象,var Position = {Latitude: 0, Longitude: 0, Heading: 0}并从 C++ 代码中运行带有 QString 的脚本, Position = {Latitude: 40, Longitude: 9, Heading: 20};但也无法更改 Position 对象属性。

任何帮助将不胜感激,谢谢。

0 投票
0 回答
41 浏览

c++ - 如何在反应中运行 qtwebsocket webassembly?

我在反应中使用我的 qtloader 文件时遇到问题,在加载过程中,我的 qtloader 在编译 wasm 文件时停止并且没有继续实例化它有人知道我应该如何运行它吗?