gpt4 book ai didi

c++ - 将 C/C++ 套接字传递到 EM_ASM 以用作 Emscripten 中的 websocket

转载 作者:行者123 更新时间:2023-11-30 03:16:43 24 4
gpt4 key购买 nike

在我的 C++ 程序中,我想做这样的事情

int mySock = socket(...);
EM_ASM_({
mySock.send("hello");
},mySock);

传递 C++ 套接字以便我可以将其用作 javascript websocket 的正确方法是什么?

最佳答案

编辑:

Emscripten C/C++ 中的 BSD 样式套接字是 websockets,因为 WebAssembly 缺少用于浏览器的低级网络 API。

所以您的目标是将 C/C++ 套接字传递给 EM_ASM JS block 。在深入了解 Emscripten 的源代码后 I found that WS.sockets[id] should work :

#include <stdio.h>
#include <emscripten.h>

int mySock = socket(...);

EM_ASM({ // Or MAIN_THREAD_EM_ASM instead.
var ws = WS.sockets[$0];
// Play with your socket here...
}, mySock);

我知道这听起来是未记录的 hacky 行为,但此刻当您想要在 Emscripten 中进行一些低级互操作时,您应该处理 hacks。

原创(此处有误,忽略)

Emscripten C/C++ 中的 BSD 套接字是 websockets,因为浏览器缺少较低级别的网络 API。

所以您的目标是将 C/C++ 套接字传递给 EM_ASM JS block 。经过一番搜索I found a hidden (undocumented) API called FS.getStream() .我还没有测试它,因为我目前没有合适的测试环境,但你可以这样尝试:

#include <stdio.h>
#include <emscripten.h>

int mySock = socket(...);

EM_ASM_({ // Or MAIN_THREAD_EM_ASM instead.
var stream = FS.getStream($0);
var data = new Uint8Array(32);
FS.write(stream, data, 0, data.length, 0);
}, mySock);

有关 FS API 的更多信息(虽然 FS.getStream() 是少数未记录的方法之一),您可以从 the Emscripten official documentation 找到它。 .

关于c++ - 将 C/C++ 套接字传递到 EM_ASM 以用作 Emscripten 中的 websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56068864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com