2015-12-27 67 views
12

我有一款遊戲正在開發中,我聽說UDP對於實時遊戲來說更勝一籌。我知道socket.io使用TCP,並想知道是否有某種方法將其切換到UDP。我試圖查找它,但只發現從2012年左右的帖子說,UDP只是在瀏覽器中的實驗。是否可以使用UDP與socket.io?

回答

11

不,這是不可能的。

socket.io使用webSocket運輸。 webSocket是TCP連接,而不是UDP連接。所以socket.io不使用UDP--它使用TCP。

據我所知,在普通HTML頁面Javascript中可以訪問的瀏覽器中沒有標準的UDP支持。

的話題其他參考資料:

Why Can't I Send UDP Packets From a Browser

Reading from udp port in browser

Chrome Supports TCP and UDP Sockets

Write a chrome extension to support UDP in browser

How to send a UDP Packet with Web RTC - Javascript?

How to talk to UDP sockets with HTML5?

Reading from udp port in browser

UDP可當你想包被儘快交付某些情況下,理想的交通工具,但如果它不能立即交付,那麼就放棄它。這在遊戲甚至視頻流中有時很有用,下一個數據包將包含下一個更新,因此如果前一個數據包沒有通過,那麼沒有什麼大不了,你寧願沒有TCP嘗試重傳丟失的數據包。但是,瀏覽器不支持使用網頁Javascript中的UDP協議。

+0

爲什麼又一次downvote? Downvoters,請解釋。如果你有合法的牛肉,我會糾正我的答案。瀏覽器中的Socket.io不能在UDP上運行。這根本不存在,因爲瀏覽器不支持任何類型的UDP傳輸。如果你因爲被拉馬讚的回答誤導而沮喪,那麼請閱讀下面的評論,因爲答案是非常具有誤導性的,並且不會提供這個問題提出的問題。 – jfriend00

3

儘管問題已經得到解答,但我想指出的是,有些方法可以使用UDP實現socket.io。例如dgram完全符合您的要求。

This is socket.io + UDP與dgram的教程。

UPDATE

Alexandre Lacheze開發出的node.js package帶來UDP到瀏覽器。它也支持socket.io。所以現在答案已經過時了。

+1

我想你可能會對這裏描述的內容感到困惑。您的第一個引用完全在node.js上運行,並且不會在瀏覽器中運行。這只是在node.js中將UDP支持的示例代碼。所以,這與瀏覽器中的UDP無關。你的第二個參考是模擬一個類似於UDP的接口,但是通過webSocket或socket.io傳輸(它們都是TCP連接)來運行它。這是一個在瀏覽器中工作的模擬UDP接口,但實際的傳輸是TCP,而不是UDP。所以,它們都不在瀏覽器中運行實際的UDP協議。 – jfriend00

+1

第二個示例與基於服務器的代理一起使用,該代理將通過socket.io運行的此模擬UDP轉換爲實際的UDP可用於與來自瀏覽器的UDP服務進行通信,但不應該認爲這是假設在瀏覽器中使用UDP的原因通常是使用UDP進行響應式低滯後遊戲 - 事實並非如此。它很聰明,可能有一些有趣的用途,但是這個問題並不是什麼問題,如何通過UDP運行socket.io。僅供參考,第二個選項中的接口名稱是'SimUDP',模擬的UDP。 – jfriend00

+0

所以,總結一下。您的答案中沒有顯示通過UDP運行的socket.io的實現,因此您的部分答案完全不受支持。而且,你的斷言Alexandre Lacheze的軟件包將UDP帶入瀏覽器也是錯誤的。它帶來了一個模擬的類似於UDP的接口,實際上是通過TCP在瀏覽器上運行的。 – jfriend00