簡體   English   中英

最小化通過UDP傳輸數據的最有效方法是什么?

[英]What is the most effective way to minimize data for transfer over UDP?

我沒有太多的細節,所以我很抱歉這個問題很愚蠢。

我對套接字有一些經驗,通常用於傳輸少量的純文本。 但是這次,我必須傳輸更多的數據,以便能夠通過UDP進行分解。

我正在開發一個游戲,其中的服務器是用Java編寫的,我想將對象數組發送給客戶端。 由於我是一名Web開發人員,因此JSON是傳輸數據時彈出的第一件事,盡管我高度懷疑這是聯網中最有效的方法。

如果是JSON:

{
    "players": [
        {
            "id": "884B0EAA2C7F16BA",   // hex string
            "name": "some guy",         // string
            "x": 0,                     // double
            "y": 0,                     // double
            "xv": 0,                    // double
            "yv": 0,                    // double
            "angle": 0,                 // double
        }, {
            "id": "AB61F7C2AAE0B488",   // hex string
            "name": "some other guy",   // string
            "x": 0,                     // double
            "y": 0,                     // double
            "xv": 0,                    // double
            "yv": 0,                    // double
            "angle": 0,                 // double
        }
    ]
}

現在,我可以添加一個自定義分隔符以按玩家分割數據,並添加另一個分隔符以分割數據。 在我的光學系統中,最有效的方法之一是每行放置播放器的值,並在這些值之間放置預定義的字符序列。

884B0EAA2C7F16BA[|]some guy[|]0[|]0[|]0[|]0[|]0
AB61F7C2AAE0B488[|]some other guy[|]0[|]0[|]0[|]0[|]0

盡管這對我有用,但名稱等仍存在一些安全隱患。 我很難告訴客戶包含“ [|]”的顯示名稱是非法的。

最小化傳輸數據的最有效方法是什么?

任何有關加密的其他信息將不勝感激!

考慮使用Google協議緩沖區。 您定義一條消息(在.proto文件中),它會以不同的編程語言為您生成代碼。

這樣,生成的代碼便能夠對消息進行編碼/解碼,而無需您考慮數據的編碼方式。

編碼的消息將非常小,並且編碼/解碼非常快。 協議緩沖區確實擅長於此。

網站上有一些很好的文檔: https : //developers.google.com/protocol-buffers/

如果您的目標是最大程度地減少要傳輸的數據,則可以始終嘗試一種不太復雜的壓縮算法(我們不想花很多時間來壓縮和解壓縮每個數據包)。 你可以看看這個問題,或搜索外部庫,如這一個

除非您可以確定每個數據字段的長度,否則必須使用某種分隔符。 幾乎在所有游戲中都避免在玩家名稱中使用某些字符,為什么不這樣做呢?

如果您仍想在播放器名稱上允許任何字符,請通過TCP套接字將所有字符一起發送,並在每個客戶端中使用ID-Player名稱對構建一個表,並使用服務器在UDP句子中提供的唯一ID。 這樣,您可以安全地使用定界符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM