Websockets 比 WebRTC 快?

Posted

技术标签:

【中文标题】Websockets 比 WebRTC 快?【英文标题】:Websockets faster than WebRTC? 【发布时间】:2013-09-24 10:22:31 【问题描述】:

我是 WebRTC 和 Websockets 领域的新手。我对制作 1 对 1 网页游戏很感兴趣。 问题只是:如何将简单的变量(主要是数字)从一个客户端发送到另一个客户端?

我有一个带有 websockets 的 Node.js 服务器(通过 socket.io)。 所以,对于客户,我有两个解决方案:

使用 Websockets:客户端 1 将 var 推送到服务器,然后 服务器将 var 推送到客户端 2。这个解决方案让我可以轻松地在一个游戏中为多个用户调整我的应用程序。 使用 WebRTC:报价和答案通过带有 websockets 的服务器发送。然后,客户端 1 通过 DataChannel 将 var 推送到客户端 2(我不需要 getUserData)

我更喜欢使用 WebRTC,因为它简化了服务器的工作,允许他管理更多的客户端。 所以我设置了两个解决方案来比较,大惊喜! Websocket 比 WebRTC 快得多!

我的测试很简单:只是一个使用 Three.js 旋转的立方体,第一个客户端在每帧进行一点旋转(每秒 60 次)并将旋转结果推送到客户端 2。在接待处,客户端 2 更新旋转和渲染。

使用 Websockets,结果是完美的,但使用 WebRTC,客户端 2 运行非常慢,比如 5 FPS。

问题是我的做法吗?正常吗? 我在 Firefox 上使用 localhost。

【问题讨论】:

【参考方案1】:

问题在于 WebRTC。 Chrome 上的 WebRTC DataChannel 实现(可能与 firefox 相同)限制在 30 kbps 左右。我不知道为什么?关于不淹没互联网的一些事情。有一个技巧可以绕过这个限制 - 在设置之前手动更改 SDP 中的“B=”。

但是... WebRTC 是 p2p 不可靠的通信。这意味着您必须格外小心,以确保不会丢失任何消息,并且两个玩家观察到相同的事件和环境。我会选择 websockets 只是因为它们更容易理解和支持。如果游戏走红,我会考虑将 WebRTC 作为一种可能的优化方式。

但是,如果您只是为了好玩而玩这个游戏,那么如果您选择 WebRTC,您将学到很多有用的东西。

如果您想查看 webrtc 在实际项目中的使用示例,请查看: http://viblast.com/demo

注意! 在 Chrome 31-32 左右引入基于 SCTP 的数据通道后,不再有带宽限制,并且有一种新的操作模式允许可靠的数据通道.

【讨论】:

从 Chrome 31 开始,默认使用 SCTP,就像在 Firefox 中一样,它启用了可靠的数据通道——尽管在实践中,实际上很少有不可靠传输的丢包。另外,据我了解,SCTP 意味着动态拥塞控制,而不是带宽的固定上限。 @SamDutton 这实际上让我想起了 WebRTC 的另一个问题:它仍处于起步阶段,API 和行为变化并不少见。 哇,谢谢!真的,这正是我搜索了很多次但没有任何结果的内容。 那么在取消带宽上限后,它是否比 websockets 更快? 可能速度一样。最大的收获是在客户端之间获得尽可能低的延迟,这在许多游戏中可能至关重要。例如cubeslam.com

以上是关于Websockets 比 WebRTC 快?的主要内容,如果未能解决你的问题,请参考以下文章

WebRTC[38]- WEBRTC 与 WEBSOCKETS 的区别

聊天使用啥协议? webRTC 或 Websockets

Webrtc、websockets、Stun/turn 服务器,一起工作?

Safari已默认支持WebAssembly!JavaScript执行速度比Chrome快80%

在拥塞的局域网中,UDP 的发送速度是不是比 TCP 快?

是否提供对 Web Sockets 的原生 PHP 支持?