由多个用户在网络浏览器界面上访问的Qt应用程序

时间:2019-02-10 19:50:17

标签: c++ qt web-applications qthread qwt

我有一个用Qt实现的应用程序,它带有一些具有以下基本特征的c ++和python集成模块(机器学习,信号处理等):

  1. 可以并行运行的内部多线程模块(QThread
  2. 通过Qt小部件(例如QwtPlotZoomerQwtPlotMarkerQGraphicsRectItemQwtPlotCurve提供可视化特性,例如2D绘图(not send images)。

我的目标是通过具有多个个用户-观察者的Web浏览器应用程序,提供运行服务器的应用程序的已经实现的应用程序特征。我进行了一些研究,并在以下链接(Wtlinklink和{{上找到了一些可行的解决方案(Qt WebGL,Qt for Assembly,link) 3}}),但作为一个没有经验的Web应用程序开发人员,我不确定要使用哪个模块或替代的C++模块。

请问您能否根据成熟度,功能,易用性和成熟度(Qt小部件的灵活性)等特征,就巫婆Web开发库提供一些使用建议和指导,还要考虑到我应用程序的特征?

谢谢。

PS:我想说一下,这对我在C ++和python而非Java和Javascript方面的经验是否有帮助?

2 个答案:

答案 0 :(得分:1)

如果要制作一个可以使用Qt服务多个客户端的应用程序,则有3个常规选项:

Qt WebGL平台插件

这将创建一个纯服务器端的实现,并简单地在浏览器中远程显示GUI。这似乎是最简单的方法,但有一些限制和缺点:

  1. 一次只能托管一个客户端。可以通过创建一个“ spawner”应用程序来解决此问题,该应用程序等待传入的流量并为每个连接的客户端启动一个新实例。但是,这需要一些额外的逻辑,并且会占用大量资源
  2. 高网络负载。尤其是交互式GUI,每个客户端 最高可达到40MBit / s!
  3. 没有客户端逻辑。在此设置中根本不可能添加客户端代码

总而言之,这种方法从未设计用于这种用例。它旨在用作无头设备或维护访问的GUI。我会建议使用它。

服务器应用程序+ Qt for WebAssembly

将应用程序拆分为两个:服务器应用程序和客户端应用程序。具有Qt的WebAssembly客户端应用程序。两者之间的通信可以通过QtWebSocketsQtRemoteObjects或其他Network-IPC解决方案来完成。

这为您提供了仅使用一种语言的优势,并且使IPC非常容易,因为双方都使用Qt。同样,繁重的计算任务在WASM中效率更高。但是,Qt for WebAssembly仍处于技术预览状态,因此尚不稳定。例如,它尚不支持多线程或TCP / IP套接字。另外,到目前为止,并非所有终端设备都支持WASM。

服务器应用程序+ HTML WebApp

最后一种方法是混合技术。使用Cutelyst之类的Web框架来创建基于Qt的Web服务器,并为其提供经典HTML网站。您可以使用QtWebChannel在Qt服务器和HTML客户端之间轻松地传输数据。


WASM和HTML客户端之间的决定取决于您。对您来说,使用WASM可能会更容易,但是它具有挑战性。我建议您在这两个方面做更多的研究。然后为这两种解决方案创建一些测试应用程序并进行比较,以找出最适合您需求的

答案 1 :(得分:0)

真的,我认为只有一件事:如果它开始崩溃,您可能需要其中之一:

https://doc.qt.io/qt-5/qmutex.html

对于Web脚本,我倾向于使用QWebEnginePage::runJavaScript(),但要注意的是这并不容易。原因是,当从C ++注入javascript时,您正在处理c ++的单线程线性环境,这使得代码注入的时间和时间变得非常困难。从根本上讲,这是一个竞赛条件,我最终开发的serviceable model只是在运行脚本直到获得期望的结果。

https://doc.qt.io/qt-5/qwebenginepage.html#runJavaScript

意思是,最好将任务委派给健壮的javascript应用程序。

最后,因为您正在使用Qt,所以开发一种“将所有内容创建为API”的心态是很好的。