我有一款遊戲正在開發中,我聽說UDP對於實時遊戲來說更勝一籌。我知道socket.io使用TCP,並想知道是否有某種方法將其切換到UDP。我試圖查找它,但只發現從2012年左右的帖子說,UDP只是在瀏覽器中的實驗。是否可以使用UDP與socket.io?
回答
不,這是不可能的。
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協議。
儘管問題已經得到解答,但我想指出的是,有些方法可以使用UDP實現socket.io。例如dgram完全符合您的要求。
This is socket.io + UDP與dgram的教程。
UPDATE:
Alexandre Lacheze開發出的node.js package帶來UDP到瀏覽器。它也支持socket.io。所以現在答案已經過時了。
我想你可能會對這裏描述的內容感到困惑。您的第一個引用完全在node.js上運行,並且不會在瀏覽器中運行。這只是在node.js中將UDP支持的示例代碼。所以,這與瀏覽器中的UDP無關。你的第二個參考是模擬一個類似於UDP的接口,但是通過webSocket或socket.io傳輸(它們都是TCP連接)來運行它。這是一個在瀏覽器中工作的模擬UDP接口,但實際的傳輸是TCP,而不是UDP。所以,它們都不在瀏覽器中運行實際的UDP協議。 – jfriend00
第二個示例與基於服務器的代理一起使用,該代理將通過socket.io運行的此模擬UDP轉換爲實際的UDP可用於與來自瀏覽器的UDP服務進行通信,但不應該認爲這是假設在瀏覽器中使用UDP的原因通常是使用UDP進行響應式低滯後遊戲 - 事實並非如此。它很聰明,可能有一些有趣的用途,但是這個問題並不是什麼問題,如何通過UDP運行socket.io。僅供參考,第二個選項中的接口名稱是'SimUDP',模擬的UDP。 – jfriend00
所以,總結一下。您的答案中沒有顯示通過UDP運行的socket.io的實現,因此您的部分答案完全不受支持。而且,你的斷言Alexandre Lacheze的軟件包將UDP帶入瀏覽器也是錯誤的。它帶來了一個模擬的類似於UDP的接口,實際上是通過TCP在瀏覽器上運行的。 – jfriend00
- 1. 是否可以安全使用socket.io?
- 2. 是否可以在Flash/ActionScript中使用UDP?
- 3. 是否可以使用socket.io取消訂閱MtGox API頻道?
- 4. 是否可以在純html5 websockets中使用socket.io服務器?
- 5. 是否可以使用JPCAP與Android?
- 6. 是否可以使用cin與Qt?
- 7. 是否可以使用PE與C?
- 8. 是否可以使用Catel與EntityFramework 7?
- 9. 是否可以使用Glade與Scala?
- 10. Socket.io - 是否可以使用socket.io構建除聊天應用以外的其他內容
- 11. 是否可以使用Auto_publish?
- 12. 是否可以使用clock_settime()
- 13. 是否可以使用PHP
- 14. 是否可以使用HTML
- 15. 是否可以使用URL
- 16. 是否可以使用JavaScript
- 17. iPhone是否「可以使用」?
- 18. 是否可以使用ExtJS
- 19. 是否可以使用xtk_edge?
- 20. 是否可以使用WIX
- 21. IWavePlayer.PlaybackStopped是否可以使用?
- 22. 是否可以使用JavaScript
- 23. 是否可以使用jquery
- 24. ,是否可以使用Request.UserHostAddress?
- 25. 是否可以使用css
- 26. 是否可以與孩子
- 27. 我可以在twisted.web中使用socket.io嗎?
- 28. 可以使用多個socket.io事件嗎?
- 29. 是否可以使用coredata使用group_concat?
- 30. 是否可以使用WF使用ExtJs?
爲什麼又一次downvote? Downvoters,請解釋。如果你有合法的牛肉,我會糾正我的答案。瀏覽器中的Socket.io不能在UDP上運行。這根本不存在,因爲瀏覽器不支持任何類型的UDP傳輸。如果你因爲被拉馬讚的回答誤導而沮喪,那麼請閱讀下面的評論,因爲答案是非常具有誤導性的,並且不會提供這個問題提出的問題。 – jfriend00