簡體   English   中英

Kryonet:最佳數據結構?

[英]Kryonet: Best Data Structure?

我正在用Java編寫圖形化的在線程序,並使用Kryonet庫處理網絡。

我相信這個庫要求數據包是類的實例。 我不確定,但是沒有找到其他建議的文檔。

我對網絡和內存效率有些了解,但是並沒有完全理解該庫,因此不確定標准方法是否有效。

對於高效數據結構,我的最佳猜測是將我的Vec2對象分解為分別代表X和Y屬性的浮點數。 從邏輯上講,將這些值存儲在單個float數組中然后將其作為數據包傳輸應該是有效的。

我對內存管理不是很熟悉,因為它與面向對象的編程有關。 由於此“數據包”在技術上是一個實例,因此我猜想這將使“內存排列”更類似於“ C結構”。 另外,我不知道Kryonet如何處理數據,所以這都是非常理論性的。

我的問題是:將所有數據填充到單個float數組中是否比將所有屬性安排為類的單個成員更有效? 也許是一組數組而不是一組數組?

提前致謝。

沒有理由將您的字段混成一個數組:就空間或時間效率而言,該數組不會給您任何幫助。 最大的例外是基於文本的表示形式,例如JSON,它必須包括“字段”的名稱及其值。 我具體指的是二進制表示形式,其中所涉及的數據的結構對於各方都是已知的。 基於我對Kryonet的快速瀏覽,看起來該表示實際上是一個二進制表示

例如,假設一個對象的架構類似於:

{
  x: 5.483,
  y: 0.7245
}

該對象有兩個浮點字段。 二進制表示形式可能恰好是8個字節長-每個浮點數為4個字節。 假設所有各方都知道一個數據包包含兩個浮點數。 或者,您可以用類型注釋二進制表示形式。 這些第一個版本可能類似於:

0000000 af40 bc74 393f d578
0000008

另一方面,文本表示形式可能類似於JSON:

{"x":5.483,"y":0.7245}

該表示的大小取決於所討論的浮標的確切值(與幅度無關)。 將此與將其編碼為JSON中的數組進行比較:

[5.483,0.7245]

它總是小於對象變量,但不一定小於二進制表示。 此外,與二進制表示相反,文本表示具有可變的大小,需要將其包括(長度前綴)或標記(例如,使用空字符)。

至於網絡速度,這完全取決於您在做什么以及如何定義速度。 您可以說速度是指可以傳輸大量數據的速率(以字節/秒為單位)。 您也可以說速度是一個數據包到達目的地所花費的時間。 另一個度量標准是往返時間(RTT),通常(但不總是)大約是所討論的兩個程序之間在任一方向上單次行程的兩倍。

如果要最大程度地提高數據/時間的速率,則希望數據占用更少的空間-較小的數據表示形式。 如果要盡量減少兩點之間的時間,同樣會發生,但有一個重要的警告:TCP等網絡協議通常會實現Nagle算法,該算法將等待短時間發送數據並一起發送多個小數據包(這可以減少網絡擁塞,可以將其禁用)。

暫無
暫無

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

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