Как использовать nanomsg в приложении скомпилированном с помощью Emscripten? Есть достаточно большой и сложный проект на C, который использует библиотеку nanomsg для работы с сетью. Задача - собрать его с помощью Emscripten в JS. Однако, здесь мы столкнулись с проблемой, в принципе все уже собирается, за исключением вызовов функций из nanomsg. Насколько я понял "порты" nanomsg, которые успешно собирались бы Emscripten отсутствуют. Единственное что удалось найти это модуль nanomsg for node для nodejs. Но как его использовать из C исходников, собираемых Emscripten'ом - пока непонятно. В связи с чем вопрос - был ли у кого-нибудь опыт сборки приложений с помощью Emscripten, которые используют nanomsg? Может быть кто-то писал wrapper C -> nodejs-nanomsg или что-то подобное? Если свести задачу к упрощенной, то необходимо собрать два примера, использующих nanomsg с помощью Emscripten:Pipeline (A One-Way Pipe)Pub/Sub (Topics & Broadcast) Как видно, все они используют nn_socket, nn_bind, nn_send и др. функции из nanomsg. Буду признателен за любую помощь.p.s. Ссылки на проекты успешно собирающиеся Emscripten'ом и использующие nanomsg крайне приветствуются.
Поскольку nanomsg не предоставляет поддержку для Emscripten, вам придется написать свой собственный wrapper для данной библиотеки, который бы обеспечивал взаимодействие с ней через интерфейс node.js.
Для начала вам нужно создать C/C++ библиотеку, которая будет обращаться к функциям nanomsg, а затем создать node.js модуль, который будет вызывать эти функции через вашу библиотеку.
Ниже приведен пример упрощенного шаблона реализации wrapper'а для вызова функции из node.js:
Это очень упрощенный пример, но он дает представление о том, как можно создать wrapper для вызова функций nanomsg из node.js при сборке с помощью Emscripten. Вам придется доработать код и добавить обработку ошибок, а также другие функции из nanomsg, необходимые вашему проекту.
Поскольку nanomsg не предоставляет поддержку для Emscripten, вам придется написать свой собственный wrapper для данной библиотеки, который бы обеспечивал взаимодействие с ней через интерфейс node.js.
Для начала вам нужно создать C/C++ библиотеку, которая будет обращаться к функциям nanomsg, а затем создать node.js модуль, который будет вызывать эти функции через вашу библиотеку.
Ниже приведен пример упрощенного шаблона реализации wrapper'а для вызова функции из node.js:
#include <nan.h>#include <nanomsg/nn.h>
#include <stdio.h>
NAN_METHOD(Init){
int sock = nn_socket(AF_SP, NN_PUSH);
if(sock < 0) {
return Nan::ThrowError("Error creating socket");
}
info.GetReturnValue().Set(Nan::New(sock));
}
NAN_METHOD(Connect){
int sock = info[0]->Int32Value();
int connect_stat = nn_connect(sock, "tcp://localhost:5555")
if(connect_stat < 0) {
return Nan::ThrowError("Error connecting");
}
}
Далее вам нужно создать bindings.gyp файл для компиляции вашей C/C++ библиотеки. Пример файла:
{"targets": [
{
"target_name": "nanomsg",
"sources": [ "nanomsg.cpp" ],
"include_dirs": ["<path_to_nanomsg_headers>"],
"libraries": ["<path_to_nanomsg_libraries>"],
"cflags!": [ "-fno-exceptions" ]
}
]
}
Теперь вам нужно создать node.js скрипт, который будет вызывать функции вашего модуля:
const addon = require('./build/Release/nanomsg.node');const socket = addon.init();
addon.connect(socket);
Это очень упрощенный пример, но он дает представление о том, как можно создать wrapper для вызова функций nanomsg из node.js при сборке с помощью Emscripten. Вам придется доработать код и добавить обработку ошибок, а также другие функции из nanomsg, необходимые вашему проекту.