如何让Autobahn-JS在QML中运行?

时间:2017-03-17 13:53:45

标签: javascript node.js qml autobahn autobahnjs

我们希望将WAMP协议用于我的服务器客户端应用程序。我发现Autobahn-js实现了Web应用程序消息传递协议(WAMP)。 我们希望使用QML来设计前端(瘦客户端)并定位Android,IOS,Windows Mobile和桌面平台。由于用Javascript编写的Autobahn-js,我认为它会起作用。但不幸的是,它没有。

以下是我做的:

  • 我已经从Github下载了Autobahn Js库。

  • 我已将所有文件都包含在我的QML项目中。

  • import" lib / autobahn.js"作为AutoBhan

  • 然后出现错误qrc:/lib/autobahn.js:15:ReferenceError:require 未定义

在谷歌搜索时我发现" require()函数是node.js的核心功能,它是引擎的一部分。它不是特定于语言的东西,就像基于浏览器的Javascript中的窗口对象不是Javascript语言中的东西。 node.js实际上是:服务器端JavaScript引擎,它执行JavaScript文件。它不是一个可以加载到Qt"等其他引擎的框架。 source.

这是我的问题:

  1. 如何制作/构建Autobahn Js库,以便在qml中使用autobahn?这实际上使node.js函数在qml中运行。

  2. 很难有C ++实现,我不相信在qml中使用C ++包装器,因为它依赖于像Boost这样的第三方。

  3. 是否可以在QML中创建依赖于node.js函数的JS库?请告诉我。感谢

  4. 仅供参考:我使用Crossbar.io作为路由器

2 个答案:

答案 0 :(得分:0)

您有四个选项

  1. 更改库,使其不依赖于任何特定于nodejs的文件
  2. 扩展QML JavaScript引擎,以便它提供nodejs特定扩展
  3. 通过QProcess
  4. 运行nodejs
  5. 查看一些试图提供嵌入nodejs的C / C ++接口的项目
  6. 但是,如果您打算使用的协议具有C / C ++实现,那么使用它可能是最好的方法。

答案 1 :(得分:0)

尝试使用AutobahnJS的browser version,而不是NodeJS版本。

如果您只需要在QML中使用WAMP,请不要为C ++ WAMP库(更难)而烦恼。

如果你想直接与你的C ++内容(在Qt中)谈论WAMP,那么有多个C ++ WAMP client libraries - 但是,我不确定它们与Qt的融合程度如何。例如,AutobahnC ++基于Boost / ASIO。

然而,最近有一个post触及这个......