首页 > 解决方案 > 多个用户在 Web 浏览器界面上访问的 Qt 应用程序

问题描述

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

  1. 可以并行运行的内部多线程模块 ( QThread)
  2. 通过 Qt 小部件提供可视化特征,如 2D 绘图(不发送图像),例如, QwtPlotZoomer, QwtPlotMarker, 。QGraphicsRectItemQwtPlotCurve

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

您能否根据成熟度、功能、易用性和成熟度(Qt 小部件的灵活性)等特点,同时考虑到我的应用程序的特点,提供一些关于使用 ww web 开发库的建议和指导?

先感谢您。

PS:我想提一下这是否有助于我在 C++ 和 python 而不是 Java 和 Javascript 方面的经验。

标签: c++qtweb-applicationsqthreadqwt

解决方案


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

Qt WebGL 平台插件

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

  1. 一次只能为一个客户端提供服务。这可以通过创建一个“spawner”应用程序来解决,该应用程序等待传入流量并为每个连接的客户端启动一个新实例。但是,这需要相当多的额外逻辑并且资源繁重
  2. 高网络负载。特别是交互式 GUI 可以为每个客户端绘制高达 40MBit/s 的数据!
  3. 没有客户端逻辑。根本不可能在此设置中添加客户端代码

总之,这种方法从来都不是为这样的用例设计的。它旨在用作无头设备或维护访问的 GUI。我建议使用它。

用于 WebAssembly 的服务器应用程序 + Qt

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

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

服务器应用程序 + HTML WebApp

最后一种方法是混合技术。使用像Cutelyst这样的网络框架来创建一个基于 Qt 的网络服务器并用它来提供一个经典的 HTML 网站。您可以使用 QtWebChannel 在 Qt-Server 和 HTML-Client 之间轻松传输数据。


WASM 和 HTML 客户端之间的决定取决于您。使用 WASM 对您来说可能更容易,但也有其自身的挑战。我建议您对两者进行更多研究。然后为这两种解决方案创建一些测试应用程序并进行比较,以确定哪一个最适合您的需求


推荐阅读