2012-10-12 124 views
7

想象一下,我想用HTML5(客戶端)和node.js(服務器)創建一個實時多人遊戲。WebRTC合適嗎? (實時多人遊戲)

我需要非常快速地將數據從服務器傳輸到客戶端,反之亦然。

在原生應用程序中,我會使用UDP獲取大部分數據(玩家位置,...),因爲它比TCP快,而且它在丟失時沒有問題。

HTML5我可以(只)使用WebSockets。 WebSocket在TCP之上,因此速度不夠快,性能不佳。

我聽說WebRTC,但我不知道這是否可以解決這個問題。

有沒有人使用它?

(我知道,那是的WebRTC的瀏覽器大多不支持仍,但是,這並不重要,我。)

+0

你確定websocket對你的用例太慢嗎? tcp套接字在websocket會話期間保持打開狀態,因此您不必擔心每條消息的連接開銷。 – simonc

+0

TCP:可靠的消息傳遞;所有數據都得到確認 管理所有數據的傳送,並自動重傳丟失的數據。 UDP:沒有確認的不可靠,盡力而爲的傳送 因此TCP對於這種用例來說只是錯誤的技術。 – appsthatmatter

+1

嘗試使用WebSocket實現它,並測量它是否真的太慢了​​(不用說,抽象您的傳輸實現,以便如果WebSockets確實不令人滿意,可以使用別的東西而不會丟失大量代碼)。現在你過早地進行了優化。 – ebohlman

回答

2

在的WebRTC而言,聽起來像你需要的是DataChannel:看draft protocolHTML5 Rocks article(免責聲明:我寫了!)

DataChannel是一項正在進行中的工作,尚未由任何瀏覽器實現。至於其他WebRTC組件,MediaStream(getUserMedia)由Chrome,Firefox Nightlies和Opera支持;其他WebRTC組件支持MediaStream(getUserMedia)。 RTCPeerConnection在Chrome中處於穩定狀態,位於旗幟之後(即將推出的版本中沒有旗標),並在2013年第一季度對Firefox 18做出承諾。

編輯:RTCDataChannel現已在Firefox和Chrome上實現。

Chrome'單頁'演示:simpl.info/dc,Firefox demo

+0

關於最新公告,我看到MediaStream和PeerConnection正在快速發展。 DataChannel怎麼樣?另外你的論壇提到了DataChannel用於瀏覽器到瀏覽器的通信。它適用於瀏覽器到服務器,對吧? – Cystack

+1

感謝您指出這一點 - 有沒有看過這一段時間:添加編輯。在服務器上,您可以使用WebRTC C++ API。 –

1

RTCDataChannel分別提供基於會話/可靠以及無連接/不可靠的傳輸,類似於本地客戶端中的TCP和UDP。更多信息here。截至2013年,這是一項可行的技術,儘管僅在之後的Chrome和Firefox版本中才有。

According to html5rocks.com,現在也可以使用二進制類型進行傳輸。所以你應該擁有一個高效的本地UDP客戶端的所有功能。 但是,我目前還不能確定二進制傳輸是否已經從webrtc存儲庫where it has been fixed,一直到Chrome,還是它現在仍然只在Chrome Canary中可用。