Javascript 通过WebRTC数据通道实现WebService是否可行?

Javascript 通过WebRTC数据通道实现WebService是否可行?,javascript,web-services,networking,network-programming,webrtc,Javascript,Web Services,Networking,Network Programming,Webrtc,是否可以通过WebRTC数据通道实现WebService 这个想法是: 客户端向服务器发出一个https请求,用于发送信号和建立会话 客户端和服务器开始通过WebRTC数据通道双向通信 福利?: 表演 请求通过一个连接进行,标准允许通过同一连接(端口)进行多个数据通道 灵活的网络拓扑 UDP 端到端加密 服务器可以通过同一连接发送事件 负载平衡可以在没有负载平衡器或各种不同解决方案的情况下从客户端的服务器池中实现 目前正在讨论向工人/服务工人/etc添加数据通道 缺点: 用于实现请求分

是否可以通过WebRTC数据通道实现WebService

这个想法是:

  • 客户端向服务器发出一个https请求,用于发送信号和建立会话
  • 客户端和服务器开始通过WebRTC数据通道双向通信
福利?:

  • 表演
  • 请求通过一个连接进行,标准允许通过同一连接(端口)进行多个数据通道
  • 灵活的网络拓扑
  • UDP
  • 端到端加密
  • 服务器可以通过同一连接发送事件
  • 负载平衡可以在没有负载平衡器或各种不同解决方案的情况下从客户端的服务器池中实现
  • 目前正在讨论向工人/服务工人/etc添加数据通道
缺点:

  • 用于实现请求分段和缓冲区限制控制的特定于应用程序的代码
  • [EDIT 3]我不知道它与HTTP/2流在性能和cpu/内存使用方面会有多大区别
想法:

  • 客户端可以是用于同步的数据副本,也可以是适用于公共IPFS网络中的orbit db的任何其他应用程序,使用orbit db的好处是只允许所有者进行写入,然后服务器可以用他的密钥对所有数据进行额外的签名,这样客户机就可以验证和信任来自服务器的数据,这样就可以卸载主服务器进行读取,这只是一个想法
[编辑]

我发现了这个回购协议: 太棒了

[编辑二]

在调查了一点之后,改变了Orbit db的想法并删除了集群IPF

[编辑部3]

在为HTTP/2搜索Fetch PROS之后,我发现了带有ReadableStreams的Fetch upload streaming,我不知道在WebRTC数据通道或HTTP/2流上运行GRPC(bidi)会有多大区别

)


非常酷的视频解释了这个功能:

这里有很多不同的观点,我们将尝试解决所有这些问题

这个想法是100%可行的。查看Pion WebRTC的示例。建立连接只需要一个请求/响应

演出 如果您正在进行对延迟敏感的工作,则数据通道更适合

通过数据通道,您可以测量背压。您可以知道有多少数据已交付,以及有多少数据已排队。如果队列已满,则表明发送的数据过多。浏览器中的其他API不提供此功能。有一些未来的API(WebTransport),但它们还不可用

数据通道允许无序/不可靠的传输。使用TCP,您发送的所有内容都将按顺序发送,这个问题称为线路阻塞。这意味着,如果您丢失了一个数据包,所有后续数据包都必须延迟。例如,如果您发送了
0 1 2 3
,如果数据包1尚未到达,则2和3尚未处理。数据通道可以配置为在数据包到达时立即向您发送数据包

我无法给出运行DTLS+SCTP和TLS+WebSocket服务器的CPU/内存成本的具体数字。这取决于您拥有的硬件/网络、工作负载等

多路复用 您可以通过单个WebRTC连接(PeerConnection)为多个数据通道流提供服务。您还可以通过单个端口为多个对等连接提供服务

网络传输 WebRTC可以通过UDP或TCP运行

负载平衡 在服务器之间移动DTL和SCTP会话比较困难(但不是很难),但对于现有库来说并不容易。它支持导出/恢复会话。但是,我不知道其他图书馆是否提供支持

TLS/Websocket更容易实现负载平衡

端到端加密 WebRTC具有强制加密。这在HTTP 1.1上非常好,如果配置不正确,HTTP 1.1可能会意外地返回到非TLS

如果您想通过服务器路由消息(而不是让服务器看到),我认为您使用的协议并不重要

拓扑 WebRTC可以在许多不同的拓扑中运行。您可以使用P2P或客户机/服务器,以及许多介于两者之间的功能。根据您正在构建的内容,您可以构建一个。您可以创建连接图,并根据需要部署服务器。这种灵活性让您可以做一些有趣的事情



希望能解决你的所有问题!很高兴在评论中进一步讨论/将继续编辑问题。

如果您的主要用例交换小内容,您可以查看。对等方可以轻松地实现客户机和服务器这两个角色,尽管请求和响应的交换消息共享相同的fomat

对于DTLS 1.2的一些高级用法,可以为您提供一些帮助


如果您不坚持使用javascript,并且java是一个选项,那么您可以检查开源项目。这是一个COAP/DTLS实现,它带有DTLS连接ID和一些预先准备好的示例,如OR。/P>,我认为,如果使用WebRTC,考虑使用情况,考虑对等辅助解决方案的潜力也是很重要的。我将添加一个
拓扑
部分,你可以用P2P做一些有趣的事情。谢谢你的回答!!,我不知道WebTransport Api的存在,我计划在2-3年内更新我的旧webservices,所以现在的事情是等待WebTransport Api在所有浏览器中实现,或者开始在WebRTC数据通道上工作,这是我不喜欢正常负载平衡的一件事(即:kubernetes ingress)TLS终止发生在负载平衡器中。我不知道NAT后面的WebRTC->TURN->SERVER的正常网络是否比正常连接HTTP->LB->SERVER的延迟更大。我知道可以将数据通道配置为订购,所以这很好,我不知道要订购多少东西