是否支持套接字(udp 和 tcp)? 如果没有,有计划吗? 谢谢。
它可以通过从主机传递函数来存档。
我想移植使用 udp 的网络程序,但找不到合适的功能。
@csy2002如果您使用的是 C 或 C++,您可以尝试使用Emscripten 。
它将 C/C++ 程序编译为 WebAssembly,并为 C stdlib、C++ stdlib、SDL、OpenGL 等提供 WebAssembly 包装器。
在许多情况下,C/C++ 程序只与 Emscripten 一起
@Pauan谢谢你的回复。 我的本机代码使用 c 或 c++,我想使用 udp 传输媒体流(视频或音频数据),但没有找到合适的功能。
由于某些原因,我无法将 webrtc 用于媒体,所以我只是找到了另一种解决方案。
@csy2002我不知道 C 或 C++,但我的理解是 Emscripten 支持(基本上)整个 C/C++ stdlib,所以现有的 C/C++ 函数应该可以正常工作。 所以你现有的代码应该可以工作。
但是,即使您可以使用现有的 C/C++ API,它也会在内部使用 WebSockets 进行连接,因此您的服务器必须接受 WebSockets。 而 WebSockets 只是 TCP。
这不是 WebAssembly 的限制,而是 Web 浏览器本身的限制:浏览器只允许您使用 HTTP(S)、WebSockets 或 WebRTC 。 它不支持原始套接字(UDP 或 TCP)。
如果您在浏览器中并且需要不可靠的 UDP 通信,那么您唯一的标准选择是使用 WebRTC。 WebRTC 通常用于用户之间的点对点连接,但您可以使您的服务器成为 WebRTC“对等点”,以便用户打开与服务器的 WebRTC 连接。 不过,据我所知,这并不是一个成熟的领域,所以我不知道有任何完整的例子可以指出任何人。 ( PeerJS是在客户端使用 WebRTC 数据通道的一个简单示例。)此外,并非所有浏览器(如 Edge)都支持 WebRTC 数据通道,因此除非您仅使用 WebRTC 的音频+视频支持,否则您需要如果您想支持这些浏览器,请使用 WebSocket (TCP) 回退。
我认为 WebAssembly 甚至 WebAPI 都应该支持 TCP 和 UDP 等低层协议。 WebRTC 或 WebSocket 都是上层协议,它被包装了很多不必要的东西和限制。 例如,在某些情况下,我们无法制作 QUIC 连接 polyfill 或使用自定义 TCP 传输控制。
如果要考虑安全性,我们可以制定一些规则。 例如,我们可以对 CORS 策略发出预检请求。
例如,我们可以对 CORS 策略发出预检请求。
许多公共服务器不会添加对这些预检请求的支持。 没有响应可以被视为“对这个服务器没有限制”。 但是我们为什么不创建一个特殊的权限呢? 我不认为应该在没有明确的用户批准的情况下建立这种联系。
许多公共服务器不会添加对这些预检请求的支持。 没有响应可以被视为“对这个服务器没有限制”。 但是我们为什么不创建一个特殊的权限呢? 我不认为应该在没有明确的用户批准的情况下建立这种联系。
我不认为公共服务器是否支持预检请求是问题所在,因为安全检查仅由客户端(例如浏览器)完成。 如果公共服务器没有以正确的预检响应进行响应,则客户端可以阻止对较低级别 API 的后续调用。
@Pauan知道为什么这个问题没有关闭吗? 根据您的评论
这不是 WebAssembly 的限制,而是 Web 浏览器本身的限制:浏览器只允许您使用 HTTP(S)、WebSockets 或 WebRTC。 它不支持原始套接字(UDP 或 TCP)。
我认为这永远不会得到支持。 任何意见?
@ondrejtomcik我不是 WebAssembly 或 W3C 工作组的成员,所以我无法对此发表评论。
但在我个人看来,这个功能应该进入浏览器本身,而不是 Wasm,所以最好在 W3C 上开一个新问题。
如上所述,如果您的目标是 Web(通过 Emscripten),您可能必须移植您的网络逻辑以使用WebSockets或尝试WebTransport 。
如果您的目标是服务器环境,请查看 WASI,它尚未实现,但有功能请求(https://github.com/bytecodealliance/wasmtime/issues/70)。
这不是 WebAssembly 本身的东西:它是由主机/嵌入器提供的。
最有用的评论
我认为 WebAssembly 甚至 WebAPI 都应该支持 TCP 和 UDP 等低层协议。 WebRTC 或 WebSocket 都是上层协议,它被包装了很多不必要的东西和限制。 例如,在某些情况下,我们无法制作 QUIC 连接 polyfill 或使用自定义 TCP 传输控制。
如果要考虑安全性,我们可以制定一些规则。 例如,我们可以对 CORS 策略发出预检请求。