是否可以通过 WebRTC 数据 channel 实现 WebService?
这个想法是:
好处?:
缺点:
想法:
[编辑]
我找到了这个仓库:https://github.com/jsmouret/grpc-over-webrtc
惊人!
[编辑2]
在调查了一下之后改变了 Orbit-db 的想法并删除了集群 IPFS
[编辑3]
在为 HTTP/2 搜索 Fetch PROS 后,我发现使用 ReadableStreams 获取上传流,我不知道在 WebRTC 数据 channel 或 HTTP/2 流上运行 GRPC (bidi) 会有多大的不同
https://www.chromestatus.com/feature/5274139738767360#:~:text=Fetch%20upload%20streaming%20lets%20web,things%20involved%20with%20network%20requests )。
非常酷的视频解释功能:https://www.youtube.com/watch?v=G9PpImUEeUA
最佳答案
这里有很多不同的观点,将尝试解决所有问题。
这个想法是100%可行的。查看 Pion WebRTC 的 data-channels例子。只需一个请求/响应即可建立连接。
表现
如果您正在做延迟敏感的工作,数据 channel 更合适。
使用数据 channel ,您可以测量背压。您可以知道有多少数据已交付,有多少已排队。如果队列已满,您就知道您发送的数据过多。浏览器中的其他 API 不会给你这个。有一些 future 的 API (WebTransport),但它们尚不可用。
数据 channel 允许无序/不可靠的交付。使用 TCP,您发送的所有内容都将按顺序交付,此问题称为线头阻塞。这意味着如果您丢失了一个数据包,则所有后续数据包都必须延迟。例如,如果您发送 0 1 2 3
,如果数据包 1 尚未到达,则 2 和 3 尚无法处理。数据 channel 可以配置为在数据包到达时立即为您提供数据包。
我无法为您提供运行 DTLS+SCTP 与 TLS+WebSocket 服务器的 CPU/内存成本的具体数字。这取决于您拥有的硬件/网络、工作负载等...
多路复用
您可以通过单个 WebRTC 连接 (PeerConnection) 提供多个 DataChannel 流。您还可以通过单个端口提供多个 PeerConnections。
网络传输
WebRTC 可以通过 UDP 或 TCP 运行
负载均衡
使用现有的库,在服务器之间移动 DTLS 和 SCTP session 更难(但并非难以处理)。与 pion/dtls它支持导出/恢复 session 。但是,我不知道其他库的支持。
TLS/Websocket 更容易负载均衡。
端到端加密
WebRTC 具有强制加密功能。这对 HTTP 1.1 来说很好,如果配置不正确,它可能会意外地退回到非 TLS。
如果您想通过服务器路由消息(而不是让服务器看到它),我认为您使用的协议(protocol)并不重要。
拓扑
WebRTC 可以在许多不同的拓扑中运行。您可以做 P2P 或客户端/服务器,以及介于两者之间的许多事情。根据您正在构建的内容,您可以构建 hybrid mesh .您可以创建连接图,并根据需要部署服务器。这种灵 active 让您可以做一些有趣的事情。
希望能解决你的所有观点!很高兴在评论中进一步讨论/将继续编辑问题。
关于javascript - 通过 WebRTC 数据通道实现 WebService 是否可行且合理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66568033/