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

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

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

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

    先感谢您。

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

    最佳答案

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

    Qt WebGL平台插件

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

  • 一次只能服务一个客户端。可以通过创建一个“spawner”应用程序来解决此问题,该应用程序等待传入的流量并为每个连接的客户端启动一个新实例。但是,这需要很多额外的逻辑,并且是资源密集的
  • 高网络负载。尤其是交互式GUI,每个客户端最多可以消耗40MBit / s!
  • 没有客户端逻辑。根本无法在此设置中添加客户端代码

  • 总而言之,这种方法从未设计用于这种用例。它旨在用作无头设备或维护访问的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可能会更容易,但是它具有挑战性。我建议您在这两个方面做更多的研究。然后为这两种解决方案创建一些测试应用程序并进行比较,以找出最适合您需求的解决方案

    10-05 20:49
    查看更多