c++ - 多个用户在 Web 浏览器界面上访问的 Qt 应用程序

标签 c++ qt web-applications qthread qwt

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

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

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

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

提前谢谢你。

PS:如果这对我有帮助,我想提一下我在 C++ 和 python 方面的经验,而不是 Java 和 Javascript。

最佳答案

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

Qt WebGL 平台插件

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

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

总而言之,此方法从未设计用于此类用例。它旨在用作 headless 设备或维护访问的 GUI。我推荐使用它。

WebAssembly 的服务器应用程序 + Qt

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

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

服务器应用程序 + HTML WebApp

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


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

关于c++ - 多个用户在 Web 浏览器界面上访问的 Qt 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54620339/

相关文章:

c++ - C++ 中的 C# 静态实例等同于什么?

c++ - C++ 什么时候调用作为类成员的对象的构造函数?

c++ - RTKlib(C 库)与 QT(C++ 代码)

c++ - 如何将 QCommandLineParser 用于具有多个参数的参数?

javascript - 条形码扫描仪仅在用户位于输入框时产生 "keypress"事件。当用户不在输入框上时要听什么事件?

c++ - 什么是 C++ 中的 "1LL"和 "-1LL"

c++ - 我可以在 Visual C++ 2010 中导入 QT .pro 文件吗

ruby - Ruby 中的 Qt Model/View 编程示例和教程

java - 甲骨文 MAF : Supports for Web application?

php - 产品的 Javascript 图片框