我们希望对我的服务器客户端应用程序使用 WAMP 协议。我找到了实现Web应用程序消息传递协议(WAMP)的Autobahn-js。 我们希望使用QML来设计前端(瘦客户端)和目标Android,IOS,Windows Mobile和桌面平台。由于Autobahn-js是用Javascript编写的,我认为它会起作用。但不幸的是,它没有。
这是我做的以下几点:
-
我已经从Github下载了Autobahn Js库。
-
我已经将所有文件包含在我的 QML 项目中。
-
将"lib/autobahn.js"导入为AutoBhan
-
然后出现错误 qrc:/lib/autobahn.js:15:引用错误:需要 未定义
在谷歌搜索时,我开始知道"require()函数是node的核心功能.js它是引擎的一部分。它不是特定于语言的东西,就像基于浏览器的Javascript中的窗口对象不是Javascript语言中的东西一样。node.js实际上是:一个服务器端的JavaScript引擎,它执行JavaScript文件。它不是一个可以加载到另一个引擎(如Qt)中的框架。源。
这是我的问题:
-
如何制作/构建 Autobahn Js 库,以便我可以在 qml 中使用 autobahn?这实际上是在 qml 中运行 node.js 函数。
-
很难实现C++,我不相信在 qml 中使用 C++ 包装器,因为它依赖于像 Boost 这样的第三方。
-
是否可以在QML中制作依赖于节点.js函数的JS库?请让我知道。谢谢
仅供参考:我正在使用 Crossbar.io 作为路由器
您有四个选择
- 更改库,使其不依赖于任何特定于 NodeJS 的内容
- 扩展 QML JavaScript 引擎,使其提供特定于 nodejs 的扩展
- 通过
QProcess
运行 NodeJS - 看看一些试图为嵌入nodejs提供C/C++接口 的项目
但是,如果您打算使用的协议具有 C/C++ 实现,则使用它可能是最好的方法。
尝试使用AutobahnJS的浏览器版本,而不是NodeJS版本。
如果你只需要QML中的WAMP,不要打扰C++WAMP库(更难)。
如果你想直接与你的C++的东西(在Qt中)谈论WAMP,有多个C++WAMP客户端库 - 但是,我不确定这些与Qt的融合程度如何。
但是,最近有一篇帖子涉及这一点..