HTML5 桌面应用程序和 C++ 业务逻辑

Posted

技术标签:

【中文标题】HTML5 桌面应用程序和 C++ 业务逻辑【英文标题】:HTML5 desktop application and C++ business logic 【发布时间】:2013-10-05 08:55:19 【问题描述】:

我有一个关于 html5 作为桌面应用程序替代品的问题。

目前我的公司开发了一个 C++ 语言的 WinCE 应用程序,带有一个 C++ 的 GUI,它通过套接字(C++ Windows 应用程序)接收和发送消息到业务逻辑层。 我们想将这个软件移植到 Linux 上,但要实现一个可交叉编译的软件。 整个应用程序在单个嵌入式 PC(BL 和 GUI)上运行。

关于表示层,我们正在研究 HTML5 可能的解决方案,但是我有一些疑问。 事实上,我读到一些浏览器支持网络套接字的特性,但似乎这种套接字不是通用的 TCP/UDP 套接字,而是进一步专门化,它们的实现在服务器端类中提供,如 Socket.IO ( Java e node.js) 和 Jetty (Java)。

那么有没有人可以向我提供一些关于如何/是否可以使用 HTML5 作为表示层并通过套接字向 GUI 发送/接收更新到与网页在同一主机上运行的应用程序的反馈?

我希望这个问题能够满足stackexchange“风格”和规则的要求,我尽我所能尽可能地清楚。 最好的祝福。 乔瓦尼·帕罗迪

【问题讨论】:

也许您可以在您的问题中添加一些标签(也许删除业务逻辑和表示层标签)以吸引关注这些标签的社区的注意 嗨,你能给我推荐一些更有吸引力的标签吗?我不知道什么可以更好地描述我的问题。再次感谢,祝你有美好的一天 很遗憾,不,因为我不熟悉您正在使用或正在考虑使用的工具 - 除了 C++。它有很多合格的追随者,您的问题肯定与C++有关。 【参考方案1】:

没有什么能阻止您让前端和后端在同一主机上通过 WebSocket 通过环回进行通信。

我假设你不愿意将你的后端移植到不同的语言,所以你需要一个 C++ WebSocket 实现。我没有关注微软在这方面提供的内容,但是在使用 Boost/ASIO 时,我建议查看WebSocket++。

此外,WebSocket 还是比较底层的(双向发送消息)。所以你可能想要更高层次的东西。您可能想查看WAMP (The WebSocket Application Messaging Protocol),它为您提供了 RPC 和 PubSub 消息传递模式。使用它,您可以插入/交换您的前端(例如,拥有原生 android)与相同的、未更改的后端对话 - 后端相同。解耦。

有各种语言的 clients 和 router(read: server) 实现。

顺便说一句:Chrome、Firefox 和 IE(从版本 10 开始)以及其他浏览器都支持 WebSocket。

我需要更多地了解具体的附带条件和要求以提供更多提示..

披露:我是 Autobahn、WAMP 的原作者,并为 Tavendo 工作。

【讨论】:

您好 Oberset,首先非常感谢您的有用反馈。你是对的,我应该保存已经与不同客户测试过的业务逻辑部分。每次用户选择一个按钮时,我都需要 udp /tcp 套接字将自定义消息从 gui 发送到 BL,并根据 BL 进程来升级 GUI 的消息。其他类型的网络消息是直接从 BL 生成的,不需要 HTML5 特定协议的支持。我的新问题,与调试工具有关,在VS中使用C++,我认为调试HTML5会更加困难,您对此主题有什么提示吗? 与调试 C++ 相比,调试 HTML5/javascript 更容易。 Chrome 具有内置功能:只需 google 即可获得 Chrome 开发者工具。 Chrome 内置了一个完整的调试器,带有断点、单步、bla bla bla。最新版本的 VS 对 JS 也有很好的支持.. 好消息,很抱歉回复晚了,但我今天不在办公室。 很抱歉我的回复晚了,但我今天无法回复您的邮件。再次感谢您的有用帮助。因此,如果我正确理解的话,一个好的方法,而不是原生 C++ 跨平台应用程序(即 QT Gui)可以实现 HTML5 页面并通过 websocket++ 执行 HTML5 GUI 和 C++ 业务逻辑之间的交互。我不需要构建应用程序或 Web 服务器,但您建议在 linux 上构建 Boost 并使用其 websocket++ 实现。你能确认我是对的吗?抱歉问了这么多问题,但我不是专家,所以我想要一个新的(最后一个)反馈 在不知道自己真正想要达到的目标的情况下,很难给出全面的建议。 Qt 是跨平台的。 HTML5 也是。两者都是恕我直言的用户界面技术。 WebSocket++ 是一个基于 Boost/ASIO 的WebSocket 实现,不包含在其中。 Boost/ASIO 有它自己的事件循环。 Qt 也。如果您在 1 台嵌入式 PC 上运行所有内容,为什么要拆分 UI 和 BL?如果不拆分,还不如使用 Qt/C++ 做一个单体应用程序(UI+BL 在 1 个可执行文件中)。整个问题太宽泛,而且是一个移动的目标。对不起。我出去了。

以上是关于HTML5 桌面应用程序和 C++ 业务逻辑的主要内容,如果未能解决你的问题,请参考以下文章

如果我从控制器中取出逻辑,是不是需要业务逻辑层?

两年游戏经历

三层架构初识和搭建

10-单点登录系统拓展实现(自己尝试实现)

存储过程特点及应用

华为HCIE云计算之FA桌面云业务发放