2017-03-17 48 views
1

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

这里是下面我做:

  • 我从Github上下载的Autobahn Js库。

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

  • 进口 “的lib/autobahn.js” 作为AutoBhan

  • 然后是错误的QRC:/lib/autobahn.js:15:的ReferenceError:要求 没有定义

在googling我知道:“require()函数是node.js的一个核心函数,它是引擎的一部分,它不像JavaScript中语言中的窗口对象那样是语言特定的。 。node.js实际上是:一个服务器端JavaScript引擎,它执行JavaScript文件,它不是fr你可以加载到另一个像Qt的引擎中“。 source.

这里是我的问题:

  1. 我怎样才能使/建高速公路JS库,这样我可以在QML使用高速公路?这实际上是在qml中运行node.js函数。

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

  3. 是否有可能使JS库依赖于QML中的node.js函数?请告诉我。由于

FYI:我使用Crossbar.io作为路由器

+0

AutobahnJS不依赖于任何Node.js的特定 - 但它是在浏览器或Node.js的任何使用而开发没有考虑QML环境,它有自己的JavaScript引擎。 – gzost

回答

0

您有四个选项

  1. 变化库,以便它不依赖于任何特定的NodeJS
  2. 延长QML JavaScript引擎,以便它提供nodejs特定的扩展
  3. 通过QProcess运行nodejs
  4. 看看一些尝试嵌入的NodeJS提供C/C++接口的项目

但是,如果你打算使用的协议有C/C++实现,使用很可能是最好的方法前锋。

0

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

如果你只需要QML内部的WAMP,不要打扰C++ WAMP库(更难)。

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

然而,有一个最近感人post在这个..

+0

感谢您的输入。正如你所说,我已经下载了[浏览器版本](https://github.com/crossbario/autobahn-js#browser-development)作为js文件并包含并导入了qs项目中的js文件。 当我建立它。未实现的代码。 ASSERT:文件编译器\ qv4ssa.cpp中的“idom == referenceIdom”,行4959 – vishnu

+0

这似乎不是AutobahnJS问题,而是一个Qt问题(ASSERT来自Qt中的C++代码) - 我们可以'不要为此做任何事情。 Bug Qt球员.. – oberstet

+0

oka.y在此之前,我的程序是正确的?我只是下载了js文件并加入了它。我没有建立它,因为我不知道如何。谢谢 – vishnu