[閒聊] LAN mode 比 Bnet mode 順的原因

看板WarCraft (魔獸爭霸 - 魔獸爭霸3)作者 (麥子)時間18年前 (2007/04/19 10:16), 編輯推噓16(1604)
留言20則, 12人參與, 最新討論串1/1
再仔細地偷看一次 Warcraft III 的封包發現, LAN mode 會比較順是必然的。 特別是在網路好的時候差距會更加明顯,因為網路不好同樣會頓到爆炸。 若是遊戲當中有任何指令, Host 會馬上傳給其它 Client , 告訴它們發生什麼是,理論上會付上一個 timestamp (時間郵戳), 告訴 Client 這件事是什麼時候發生的,因此 Client 就知道, 現在的遊戲時間已經到了這裡,在這裡之前所有發生的事都知道了。 就把遊戲的狀態更新到該時間點。 在 Bnet mode 底下, Host 每 0.25 秒會送一個同步化封包出去。 告訴 Client 在接下來(沒錯,接下來) 0.25 秒之內沒其它別的事了 因為如果所有的使用者都沒有做任何事,那麼 Host 就不會送動作給 Client , 就沒有 timestamp 讓 Client 更新遊戲的狀態,為了讓遊戲順利進行, Host 在沒事的時候也會週期性地送封包給 Client 說「沒事」。 我們現在來看看兩種不同情況的 lag 。首先若是 Client 都有送出封包, 但是 Host 很慢才收到,假設 Client 送出 A 封包是在 T[0] (第零秒), 但是 Host 在 T[2] 才收到封包,因此在 T[0] 到 T[2] 之間, Host 都說沒事, 因此 Client 收到也只能照做,在這段時間不論做什麼動作都不會有反應, 直到兩秒以後動作才被 Host 收到, Host 收到動作後馬上傳回給 Client , 因此在遊戲時間中 T[2] 該動作就被做出來了,這就是延遲兩秒的情況。 若是 Client 都有送出封包,但是根本收不到 Host 送來的封包, 連「沒事」也聽不到的話, Client 就無法更新遊戲狀態(免得狀態不一致), 此時遊戲當中的角色都會卡在原位,動也不動,直到收到 Host 的封包。 這種情況大致上就是「突然很頓」的情況,一時間人物完全都沒有動作。 這麼來看,即使真的「完全都沒事」 Client 也得要等 0.25 秒才能更新狀態, 在這 0.25 秒之內做的動作就算做了,等到 Host 送回來也會比現在的「沒事」封包晚, 因此 0.25 秒左右的 delay 在 Bnet mode 恐怕是免不了的。 0.25 秒也是電話通話品質當中可以接受的上限,單程 delay 超過這個大小, 人就會很有感覺,講國際電話有時候話常打架,就是因為這個原因。 然而對於比講話更細密的撐線遊戲, 0.25 秒的感受其實滿明顯的。 那為什麼 LAN mode 會比較順呢? 因為在 LAN mode 下 Warcraft III 預設更好的網路, 在 LAN 裡面比較不用擔心流量過大(尤其是 Bnet 的 ladder 是 server 在撐), 因此對於「沒事」封包更加大方,它每 0.1 秒就會送一次, 也就是 delay 可以壓到 0.1 秒左右。這個量已經符合多數人神經敏感度的極限, 和一般人作尺反應測定的時間差不多,因此這個量是可以接受的。 若是網路狀況良好,讓 Bnet mode 跟 LAN mode 都可以正常運行, 其 delay 的狀況大致就是 0.25~0.5 秒之間與 0.1~0.2 秒之間, 當然越好的網路越接近最佳值,只不過即使都在最佳值,還是有 2.5 倍的差距。 知道這件事以後我曾嘗試要把 Bnet mode 的同步化封包量提高, 不過限於無法直接修改 Warcraft III 的程式,所以經過一個晚上的努力完全失敗。 所以還是好好修改 ULan 把帳密系統、部族系統、黑名單系統弄出來比較實際。 (因為我昨天睡覺前想到一個好方法,其實這篇文章重點只有最後一行) -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.31.132

04/19 10:19, , 1F
推,謝謝你的認真回應...我走錯版了...歹事... :)
04/19 10:19, 1F

04/19 10:33, , 2F
剛好最近學到....又上了一課
04/19 10:33, 2F

04/19 10:36, , 3F
樓上在上計網概?
04/19 10:36, 3F

04/19 10:37, , 4F
就叫你先做該做的事喔- -+ 軟工沒學好XD
04/19 10:37, 4F

04/19 10:43, , 5F
感謝你的認真回硬 糟 透露出我是西斯洨眾了
04/19 10:43, 5F

04/19 10:56, , 6F
YCGM 要是有做出來就造福所有 Bnet 的使用者ㄟ...
04/19 10:56, 6F

04/19 11:01, , 7F
不能再架pvpgn了啦T___T 不然GGC早就被我自己out掉了
04/19 11:01, 7F

04/19 11:03, , 8F
ㄟ...sorry我想太深了 我懂你怎麼做了 XD
04/19 11:03, 8F

04/19 11:06, , 9F
把已完成跟未完成的計劃加在一起 就變超級外掛= =...
04/19 11:06, 9F

04/19 12:01, , 10F
高手 淺顯易懂
04/19 12:01, 10F

04/19 12:11, , 11F
推一個 :P
04/19 12:11, 11F

04/19 12:20, , 12F
太專業 看不懂XD
04/19 12:20, 12F

04/19 13:09, , 13F
推認真文,真研究生無雙
04/19 13:09, 13F

04/19 13:39, , 14F
呃...Warcraft不是p2p嗎@@?
04/19 13:39, 14F

04/19 14:38, , 15F
是 p2p ,那只是指玩的時候不經過 server
04/19 14:38, 15F

04/19 14:38, , 16F
但是還是有 host 來確保指令的順序沒錯
04/19 14:38, 16F

04/19 15:18, , 17F
source code!!(伸) XDDDDD
04/19 15:18, 17F

04/19 15:41, , 18F
什麼東西的 source code?
04/19 15:41, 18F

04/19 15:42, , 19F
對了 因為要寫新東西 ULan 這邊我暫時關掉
04/19 15:42, 19F

04/19 16:57, , 20F
隨便喊喊 dont mind XDDDD
04/19 16:57, 20F
文章代碼(AID): #169j3p-2 (WarCraft)
文章代碼(AID): #169j3p-2 (WarCraft)