什么是基于套接字的应用程序的WebAssembly,http或非http(例如MQTT)基于Web的协议

问题描述 投票:0回答:1

几天前我开始学习 WebAssembly。 我知道 WebAssembly 是一个已编译的二进制文件,可以与 javascript 一起使用来运行 用 C/C++、Rust 等语言编写的应用程序,只需进行很少的更改。

我的问题是,如果我正在实现一个 TCP/IP(或 UDP)Socket 程序或基于 HTTP 的服务器,并使用 emscripten SDK 编译它并在浏览器中运行,我到底会得到什么? 有什么好处? 这是否意味着我能够早些时候从终端运行服务器并使用浏览器或邮递员作为客户端来执行 GET/POST 请求。目前,使用 WebAssembly,我可以通过浏览器运行该应用程序(这实际上意味着通过浏览器查看控制台)?

如果我可以将 MQTT 等 IoT 协议转换为 WebAssembly,WebAssembly 有何帮助? 这样做的用例是什么? 与实施 MQTT-HTTP 代理与边缘云通信有何不同?

WebAssembly 二进制文件也在客户端运行吗?如果是,用户在客户端下载 WebAssembly 二进制文件后将使用浏览器的本地运行时来运行应用程序?

webassembly emscripten
1个回答
3
投票

浏览器中的WebAssembly(WASM)在用户本地浏览器上执行,并且受限于浏览器的功能和限制。由于目前浏览器不允许基于套接字的网络,因此您编译到 WASM 的任何程序都无法执行打开套接字之类的操作或通过 MQTT 等非 Web 网络协议直接通信。

Emscripten 作为一个库尝试通过 WebSocket、XHR 或 fetch 代理来模拟 POSIX 网络功能。它对构建服务器的方式施加了限制,并且可能需要修改许多现有应用程序才能与 Emscripten 配合使用。您还需要在其他地方托管额外的代理服务器,例如 Web 服务器或本地计算机。因此,使用 Emscripten,从浏览器与 Web 服务器通信或在浏览器中托管服务器在理论上是可行的,但有我提到的具体注意事项。

WASM 也可以在浏览器外部运行,例如 Web 服务器或嵌入式系统的一部分。在每个不同的环境中,可能存在较少或不同的限制。 WASI 是一项标准化工作,旨在以安全且可移植的方式将 API 引入 WASM,例如 套接字和 HTTP

© www.soinside.com 2019 - 2024. All rights reserved.