WebRTC合适吗?(实时多人游戏)

9

假设我想创建一个实时的多人游戏,使用HTML5(客户端)和node.js(服务器)。

我需要非常快速地从服务器向客户端传输数据,反之亦然。

在本机应用程序中,我会使用UDP来传输大部分数据(玩家位置等),因为它比TCP要快得多,并且当数据丢失时不会有太大影响。

在HTML5中,我只能使用WebSockets。WebSockets建立在TCP之上,因此对于良好的性能而言并不够快。

我听说过WebRTC,但我不知道这是否可以解决这个问题。

有没有人有相关经验?

(我知道,WebRTC仍然不受大多数浏览器支持,但这对我并不重要。)


你确定Websockets对于你的使用场景来说太慢了吗?TCP套接字在整个Websocket会话期间保持打开状态,因此您不必担心每个消息的连接开销。 - simonc
1
TCP:可靠地传递消息;所有数据都得到确认,管理所有数据的交付,丢失的数据会自动重传。UDP:不可靠的、尽力而为的传递,没有确认机制。因此,对于这种用例来说,TCP技术显然是不合适的。 - appsthatmatter
1
尝试使用WebSockets来实现,并进行测量以确定它是否真的太慢(不用说,要将传输实现抽象化,这样如果WebSockets被证明不理想,你可以使用其他方法而不需要废弃大量代码)。目前你还在过早地进行优化。 - ebohlman
1
Firefox Nightlies已经开始实现WebRTC DataChannel:https://hacks.mozilla.org/2012/11/progress-update-on-webrtc-for-firefox-on-desktop/ 我想知道是否可以将Node.js用作连接中的一个对等方。 - Willem
2个回答

2
关于WebRTC,看起来你需要的是DataChannel: 参见草案协议HTML5 Rocks文章(免责声明:我写的!)
DataChannel仍在开发中,尚未被任何浏览器实现。
至于其他WebRTC组件,MediaStream(getUserMedia)由Chrome、Firefox Nightlies和Opera支持;RTCPeerConnection在Chrome稳定版中,位于标志后面(在即将推出的版本中不需要标志),承诺在2013年第一季度为Firefox 18提供支持。
编辑:RTCDataChannel现已在Firefox和Chrome上实现。
Chrome“单页面”演示:simpl.info/dcFirefox演示

关于最新的公告,我看到MediaStream和PeerConnection正在快速发展。DataChannel进展如何?此外,您的文章提到了用于浏览器之间通信的DataChannel。它也可以与浏览器对服务器通信一起使用,对吗? - Cystack
1
谢谢指出这个问题 - 我已经有一段时间没有看过了:添加了编辑。在服务器上,您可以使用WebRTC C++ API。 - Sam Dutton

1

RTCDataChannel提供基于会话的/可靠的传输和基于连接的/不可靠的传输,分别类似于本地客户端中的TCP和UDP。有关更多信息请点击这里。截至2013年,这是一项可行的技术,尽管仅适用于较新版本的Chrome和Firefox。

根据html5rocks.com的说法,现在也可以使用二进制类型进行传输。因此,您应该拥有使用高效的本机UDP客户端所具有的所有功能。然而,我仍然不确定二进制传输是否已经从webrtc存储库被修复, 而直接进入了Chrome,或者它目前仅在Chrome Canary中可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接