Design: 是否支持套接字(udp 和 tcp)?

创建于 2018-11-24  ·  12评论  ·  资料来源: WebAssembly/design

是否支持套接字(udp 和 tcp)? 如果没有,有计划吗? 谢谢。

最有用的评论

我认为 WebAssembly 甚至 WebAPI 都应该支持 TCP 和 UDP 等低层协议。 WebRTC 或 WebSocket 都是上层协议,它被包装了很多不必要的东西和限制。 例如,在某些情况下,我们无法制作 QUIC 连接 polyfill 或使用自定义 TCP 传输控制。

如果要考虑安全性,我们可以制定一些规则。 例如,我们可以对 CORS 策略发出预检请求。

所有12条评论

它可以通过从主机传递函数来存档。

我想移植使用 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 本身的东西:它是由主机/嵌入器提供的。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

frehberg picture frehberg  ·  6评论

artem-v-shamsutdinov picture artem-v-shamsutdinov  ·  6评论

jfbastien picture jfbastien  ·  6评论

dpw picture dpw  ·  3评论

chicoxyzzy picture chicoxyzzy  ·  5评论