Websockets比WebRTC更快?

时间:2013-09-24 10:22:31

标签: javascript html5 websocket webrtc

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

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

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

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

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

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

问题是我这样做的方式吗?这是正常的吗? 我正在使用Firefox上的localhost。

1 个答案:

答案 0 :(得分:8)

问题在于WebRTC。 Chrome上的WebRTC DataChannel实现(可能与firefox相同)限制在30 kbps左右。我不知道原因是什么?关于不会充斥互联网的事情。有一个黑客可以规避这个限制 - 在设置之前手动更改SDP中的“B =”字段。

但是...... WebRTC是p2p UNRELIABLE通信。这意味着您必须格外小心,确保没有消息丢失,并且两个玩家观察相同的事件和环境。我会选择websockets,因为它们更容易理解和支持。如果游戏变得病毒式传播,我会将WebRTC视为可能的优化。

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

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

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