9

我正在使用 Emscripten 系统将一堆 C++ 代码移植到 Javascript。C++ 代码有许多调用fopen是同步 IO 调用。在 Emscripten 中,我们使用对本地资源的 XHR 请求来模拟这一点,但是,在 Firefox 中,同步 XHR 调用(带有responseTypeofblobarraybuffer)仅在 Web-Worker 中支持。转换所有 c++ 代码以适应异步 IO 代码似乎非常复杂,所以对于我的第一次尝试,我想看看我是否可以伪造一个同步 XHR 请求。

我最初的想法是主循环可以与 web-worker 共享一些状态,这可以进行同步 io 调用并更新共享状态,而主循环暂停并等待 web-worker 完成。免责声明:我知道这不是典型的 Javascript 方式,但我正在移植同步代码,而不是从头开始编写新代码(我肯定会使用异步 IO)。

鉴于网络工作者和主循环之间共享状态的限制,这个想法看起来站不住脚。

还有其他方法可以做到这一点吗?

4

2 回答 2

2

因此,在查看了所有答案并进行了一些我自己的阅读之后,似乎最好的答案是:“可以,但仅限于文本数据,您必须将其转换回二进制数据”。这很慢,但确实有效。

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data?redirectlocale=en-US&redirectslug=DOM%2FXMLHttpRequest%2FSending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers

于 2013-05-16T14:52:57.477 回答
1

你看过像 qunit 和 sinon 这样的测试库吗?我觉得茉莉或许也能做到,但我知道诗乃能做到

http://sinonjs.org/docs/#server

于 2013-05-07T16:43:03.397 回答