簡體   English   中英

這是優化我的網絡模型的更有效方法嗎?

[英]Is this a more effective way to optimize my networking model?

首先,我將解釋我的網絡模型:

我的游戲中的聯網由遠程服務器和客戶端上的配對對象組成。 為了簡短說明,假設服務器世界中有多個字符需要與客戶端同步(為了簡化起見,我將只考慮其中的一個)

每次在服務器端創建一個角色時,服務器都會實例化ServerRpgCharacter-此類包裝RpgCharacter並注冊觀察者等以監視角色並向該角色廣播相關突變。 然后,服務器為ServerRpgCharacter請求一個pair對象(也就是說,它請求客戶端為將與之通信的該對象實例化一個pair。)該pair可以是任何類,但是ServerRpgCharacter在遠程端調度的任何消息都是在客戶端分別由它們各自的配對接收。

它更多地涉及多個客戶,但最終效果很好。

無論如何,我一直在考慮多種方法來優化此模型。 現在的工作方式是,當一個對象向它的消息對發送消息時,它就排隊進入“快照”中。 每當任何成對的實體調度消息時,它將被扔到同一快照中。 然后將快照壓縮並以200ms的時間間隔發送。

問題是我正在使用TCP / IP協議來傳輸這些快照。 我不確定TCP協議的工作原理,但是我假設如果快照的數據包被丟棄,則必須重新發送整個快照。

因此,我想知道是否如果我放棄TCP而是在UDP之上實現自定義層會更好,在這里我不是為所有對發送的所有消息分派一個完整的快照,而是讓這些對保持各自的數據包排序和緩沖。 這樣,如果丟棄了對A的數據包,則對B可以忽略以下事實:如果A的數據包被丟棄,則對A有一個。

然后,我需要考慮的是,壓縮此數據的效率較低,因為傳輸的數據較少。

使用TCP壓縮更有效,因為您可以使用整個流的上下文進行壓縮。 您不能使用UDP來執行此操作,因為必須分別壓縮每個數據包。

UDP的好處是您可以丟棄數據包而不能重新發送它們,因為您認為以后的數據包將足夠快地更新信息。

時間間隔需要更短,因為200 ms對於用戶而言很明顯。 50 ms可能是一個更好的選擇。

可以使用空間查找來代替普通的偵聽器模式。 當事件發生時,在同一水平上且X平方距離內的事物值得注意。 當玩家和怪物四處移動時,這將節省您必須維護的大量列表。

暫無
暫無

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

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