Как перейти к преобразованию привязки node.js дополнения в C ++ в целевую компиляцию в WASM?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Как перейти к преобразованию привязки node.js дополнения в C ++ в целевую компиляцию в WASM?

Сообщение Anonymous »

контекст
существует существующая библиотека HTTP/3 и WebTransport, написанная исключительно для node.js с использованием Node-API. Реализация сервера работает с Chromium и Firefox в качестве клиентов. Узел запускает сервер. Bun может запустить сервер, хотя существует с ошибкой

Код: Выделить всё

E0413 22:42:56.932056   82865 quic_connection.cc:2613] quic_bug_12714_21: ProcessUdpPacket must not be called while processing a packet.
terminate called after throwing an instance of 'Napi::Error'
what():  ReadableStream is not readable
Aborted
< /code>
deno
запускает сервер, затем ошибки, когда клиент пытается подключить

Код: Выделить всё

terminate called after throwing an instance of 'Napi::Error'
what():  this.socketInt.getSendQueueCount is not a function
Aborted

< /code>
Deno's HTTP/3 WebTransport
Реализация работает для deno и chrome как клиенты, не работает, когда Firefox является клиентом.
Так что я выбираю node.js, внедрение узла-API для моих целей, из-за самого широкого досягаемости для использования между Javascript Runtimes. Чтобы преобразовать привязки Node-API в C ++ в WASM (с поддержкой или без WASI) для возможности запустить тот же код сервера с использованием узла , deno , bun и в конечном итоге в Chrome .
Связывание выглядит как
.

Код: Выделить всё

    void Http3WTSessionJS::processStream(bool incom, bool bidi, uint64_t sendOrder, uint64_t sendGroupId, Http3WTStream *stream)
{
Napi::HandleScope scope(Env());
Http3Constructors *constr = Env().GetInstanceData();
Napi::Object strobj = constr->stream.New({});
Http3WTStreamJS *strjs = Napi::ObjectWrap::Unwrap(strobj);
strjs->setObj(stream);
if (!stream->gone())
strjs->Ref();

stream->setJS(strjs);

Napi::Object objVal = Value().Get("jsobj").As();

Napi::Object retObj = Napi::Object::New(Env());
retObj.Set("stream", strobj);
retObj.Set("incoming", incom);
retObj.Set("bidirectional", bidi);
retObj.Set("sendOrder", sendOrder);
retObj.Set("sendGroupId", sendGroupId);

objVal.Get("onStream").As().Call(objVal, {retObj});
}
< /code>
and there's a bunch of them

Here are some pointers for http/3: https://github.com/fails-components/webtransport/blob/master/transports/http3-quiche/src/http3wtsessionvisitor.cc
...
all these use NAPI for node binding and would need a replacement, if compiled to wasm. (Including the mechanims for alarams and napialarmfactory and sockerjswriter.cc.

There's a tsconfig.json
и существующая дорожная карта сборки, которая использует Cmake-js , которая включает в себя такие строки, как

Код: Выделить всё

switch (argv[2]) {
case 'prebuild':
try {
await prebuild([
'-t',
'6',
'-r',
'napi',
'--strip',
...pbargspre,
'--backend',
'cmake-js',
'--',
...pbargs
])
} catch (error) {
console.log('prebuild failed')
process.exit(1)
}
break
case 'install':
try {
const pbres = await prebuildInstall([
'-r',
'napi',
'-d',
'-t',
'6',
'--verbose'
])
Статус, опции
Если никто не столкнулся с этим случаем и задокументировал их шаги, то ответ по умолчанию - это необходимые конверсии в подготовке к компиляции в Wasm, и в конечном итоге Javascript, используя Biranne's wasm2js , с помощью Любой столкнулся с этим видом выходящего кода и использовал некоторую автоматизированную существующую систему сборки, которая преобразует привязки NAPI , в экспортируемые функции, которые такой инструмент, как Clang wasi-sdk, или даже emscripten; Если да, какая у вас дорожная карта?

Подробнее здесь: https://stackoverflow.com/questions/795 ... ompilation
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»