Как заставить Autobahn-JS работать в QML?
Мы хотим использовать протокол WAMP для моих серверных клиентских приложений. Я нашел Autobahn-js, который реализует протокол обмена сообщениями веб-приложений (WAMP). Мы хотели бы использовать QML для разработки внешнего интерфейса (тонкого клиента) и целевых платформ Android, IOS, Windows Mobile и настольных компьютеров. Поскольку Autobahn-js написан на Javascript, я думал, что это сработает. но, к сожалению, это не так.
Вот следующее, что я сделал:
Я скачал библиотеку Autobahn Js с Github.
Я включил все файлы в свой проект QML.
импортировать "lib/autobahn.js" как AutoBhan
Затем появляется ошибка qrc:/lib/autobahn.js:15: ReferenceError: require не определен
после поиска в Google я узнал, что "функция require() является основной функцией node.js, которая является частью движка. Это не что-то специфичное для языка, как объект окна в Javascript, основанном на браузере, это не то, что в Javascript language. node.js на самом деле представляет собой серверный движок JavaScript, который выполняет файлы JavaScript. Это не среда, которую вы могли бы загрузить в другой движок, такой как Qt ". источник.
Вот мой вопрос:
Как я могу сделать / собрать библиотеку Autobahn Js, чтобы я мог использовать autobahn в qml? который фактически делает функции node.js работающими в qml.
Несмотря на реализацию C++, я не уверен в использовании оболочки C++ в qml, потому что это зависит от сторонних разработчиков, таких как Boost.
Можно ли сделать библиотеку JS, которая зависит от функций node.js в QML? Пожалуйста, дайте мне знать. Спасибо
К вашему сведению: я использую Crossbar.io в качестве маршрутизатора
2 ответа
Попробуйте версию браузера AutobahnJS, а не версию NodeJS.
Если вам нужен только WAMP внутри QML, не беспокойтесь о библиотеках C++ WAMP (сложнее).
Если вы хотите поговорить WAMP напрямую с вашим C++ материалом (в Qt), есть несколько клиентских библиотек C++ WAMP - однако я не уверен, насколько хорошо они сочетаются с Qt. Например, AutobahnC++ основан на Boost/ASIO.
Тем не менее, недавно был пост, касающийся этого..
У вас есть четыре варианта
- изменить библиотеку так, чтобы она не зависела от чего-либо конкретного nodejs
- расширить механизм JavaScript QML, чтобы он предоставлял специфичные для nodejs расширения
- запустить nodejs через
QProcess
- посмотрите на некоторые из проектов, которые пытаются предоставить интерфейс C/C++ для встраивания nodejs
Однако, если протокол, который вы намереваетесь использовать, имеет реализацию C/C++, использование этого, вероятно, является лучшим способом продвижения вперед.