对于使用 Emscripten 的 C++ 代码,要提取 fetch()
返回的流响应体数据,你可以按照以下步骤进行操作:
- 首先,使用
emscripten_fetch()
发起网络请求。请确保已经引入了<emscripten/fetch.h>
头文件。
emscripten_fetch_attr_t attr;
emscripten_fetch_attr_init(&attr);
strcpy(attr.requestMethod, "GET");
attr.attributes = EMSCRIPTEN_FETCH_LOAD_TO_MEMORY;
attr.onsuccess = onDataSuccess; // 成功回调函数
attr.onerror = onDataError; // 失败回调函数
// 设置请求 URL 和其他属性
const char* url = "http://example.com/stream_data"; // 替换为实际的数据源URL
emscripten_fetch(&attr, url);
- 在成功回调函数
onDataSuccess
中,你可以访问response["body"]
获取流响应体数据。
void onDataSuccess(emscripten_fetch_t *fetch) {
if (fetch->status == 200 && fetch->numBytes > 0) {
val response(val::global("JSON").call<val>("parse", val(fetch->data))); // 将 JSON 字符串转换为 JavaScript 对象
val bodyArrayBuffer = response["body"].as<val>(); // 获取流响应体的 ArrayBuffer 对象
Uint8Array dataArray(bodyArrayBuffer); // 将 ArrayBuffer 转换为 Uint8Array
std::cout << "Received data: ";
for (size_t i = 0; i < dataArray["length"].as<size_t>(); i++) {
std::cout << static_cast<char>(dataArray[i].as<unsigned char>());
}
std::cout << std::endl;
} else {
std::cerr << "Failed to fetch data" << std::endl;
}
emscripten_fetch_close(fetch); // 关闭资源
}
在上述代码中,我们首先将 fetch->data
转换为 JSON 对象,然后访问其中的 response["body"]
属性来获取流响应体数据。接下来,我们将 ArrayBuffer 对象转换为 Uint8Array,并遍历每个字节打印出来。
请注意,在实际使用中,你需要根据请求的数据类型和格式进行适当的处理。同时,请确保已经引入了 <emscripten/bind.h>
和 <emscripten/fetch.h>
头文件,并按照 Emscripten 的相关规范进行编译和构建。
希望这能帮助到你提取流响应体数据。如果还有其他问题,请随时提问。
内容由零声教学AI助手提供,问题来源于学员提问