8

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

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

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

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

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

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

问题是我这样做的方式吗?正常吗?我在本地主机上工作,在 Firefox 上。

4

1 回答 1

9

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

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

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

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

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

于 2013-09-25T09:39:58.797 回答