- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以通过 WebRTC 数据 channel 实现 WebService?
这个想法是:
最佳答案
这里有很多不同的观点,将尝试解决所有问题。
这个想法是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/
一 点睛 通道用于数据的双向传输,即一个通道既可以用于读数据,又可以用于写数据。注意,这点不同于 I/O 中的 Stream,Stream 是单向的(只能是输入流或输出流)。 在 NIO 中,就是使用
一 点睛 通道用于数据的双向传输,即一个通道既可以用于读数据,又可以用于写数据。注意,这点不同于 I/O 中的 Stream,Stream 是单向的(只能是输入流或输出流)。 在 NIO 中,就是使用
我是一名优秀的程序员,十分优秀!