我正在研究我的多人遊戲中服務器 - 客戶端通信的結構。MulticastSocket多人遊戲
我得出的結論是,UDP是最好的選擇,因爲使用它的方式「不會丟失」,如果數據包丟失,它不會阻止應用程序。 我還將使用TCP發送需要數據包的可靠性,例如在登錄過程和交換信息(如更改服務器,更改地圖,更新等)期間的信息。它還將運行基於IRC的聊天。 (所有的命令實際上都是IRC風格的自定義消息)。
我想知道在服務器和客戶端之間發送交互消息(移動,法術,對象,動作等)的最佳方式是什麼。
閱讀一些我來到MulticastSocket的文檔。
我的問題是:
最好是連續的信息流發送給所有的客戶端啓動一個線程爲每個玩家(我在TCP通訊辦),其中每個DatagramSockets會聽到一個隊列發送的每個新消息給它的客戶。這意味着所有的地圖和所有的移動(假設地圖上可能有50名玩家)將被髮送給所有玩家,並且每個數據包必須更大才能包含所有這些信息。 或者更好地爲每個地圖使用一個線程,只有當某個玩家在特定地圖內時使用多播通信,纔會向該地圖內的玩家發送消息,並使用MulticastSocket偵聽。
我讀了防火牆或路由器使用多播的問題,但我無法弄清楚這些問題可能是什麼(與普通的UDP不同)。
應用程序應該由配置問題少的人使用。
某些路由器被配置爲阻止多播數據包,因爲它們可能會導致網絡上的不期望的業務。試想一下,惡意用戶通過網絡發送虛擬組播數據包,並使用通配符地址。數據包的範圍也很重要。與較小的網絡(如專用LAN)相比,如果數據包位於較大的網絡(例如,互聯網)上,數據包就不太可能到達。至於這是否可以避免(仍然使用多播),我不能給你一個很好的答案。 – initramfs
我不與組播貼,其實這個問題是關於什麼是創建通信服務器客戶UDP的最佳方式,我可以沒有問題更改。 也許我可以創建一個模擬多播套接字的類,一次向多個客戶端發送相同的數據包?但我不知道它是否會足夠快。感謝您的評論 – Gianmarco
我更關心帶寬而非速度。與傳統的每個連接需要數據包的網絡結構相比,多播數據包只發送一次。如果有50個玩家在服務器中,與單個連接的用戶相比,您必須考慮50倍的帶寬。我只是提供了關於多播包的見解。 – initramfs