我們可以想象,在單一世界架構(gòu)中,肯定需要大量的服務(wù)器來支持,但反映在虛擬世界中,時(shí)間的流動(dòng)是唯一的。全部服務(wù)器的時(shí)間流動(dòng)就是整個(gè)世界的時(shí)間之軸,也就是時(shí)間之軸的流動(dòng)是整個(gè)世界的標(biāo)準(zhǔn)時(shí)間。
在實(shí)現(xiàn)中,單一世界顯然是由很多服務(wù)器構(gòu)成了,每個(gè)服務(wù)器之間必然存在時(shí)間差,這種時(shí)間差可能導(dǎo)致基于時(shí)間相關(guān)的行為發(fā)生混亂。比如P1/P2兩個(gè)玩家互 相攻擊,P1在T1時(shí)間作出攻擊行為,P2在T2時(shí)間作出攻擊行為,本來P1先擊中P2,并殺死P2,但由于時(shí)間差的緣故,T2反而小于T1,導(dǎo)致 P2的攻擊行為先于P1發(fā)生,最后,反而是P2先擊殺了P1。如果統(tǒng)一由時(shí)間之軸作為基準(zhǔn)的話,這種情況就不會(huì)發(fā)生。時(shí)間之軸規(guī)范世界所有事件的發(fā)生順 序,所以他的重要性不用贅述。
但是,在實(shí)際中,卻沒有那么嚴(yán)格。我們可以想象,影月谷和荊棘谷之間的時(shí)間順序并沒有什么關(guān)系,他們之間的時(shí)間粒度完全可以在比較粗的粒度上保持一致。而 靠的比較近的暴風(fēng)城和閃金鎮(zhèn)的世界時(shí)間誤差的精度要求就高點(diǎn)了。對(duì)精度要求最高的只有2個(gè)事情,1、發(fā)生關(guān)聯(lián)的時(shí)候,時(shí)間的順序關(guān)系才有作用;2、靠近分 區(qū)邊界的實(shí)體,這兩個(gè)比較好理解。發(fā)生關(guān)聯(lián)的兩個(gè)實(shí)體,關(guān)聯(lián)的發(fā)生順序?qū)λ麄兇嬖谟绊懀缟厦嫠枋龅膽?zhàn)斗場(chǎng)景。而靠近分區(qū)邊界的實(shí)體就容易發(fā)生關(guān)聯(lián)。如 果在一個(gè)分區(qū)內(nèi)部的2個(gè)實(shí)體,他們得到的都是一個(gè)服務(wù)器的時(shí)間,所以不會(huì)存在時(shí)間誤差。
我們考慮一個(gè)最高精度的情況,就像上面兩個(gè)玩家在分區(qū)邊界發(fā)生的攻擊行為。這時(shí)世界時(shí)間為T毫秒,A區(qū)為TA毫秒,B區(qū)為TB毫秒,網(wǎng)絡(luò)傳輸延時(shí)為D毫 秒。我們假設(shè)P1/P2作出攻擊行為的時(shí)間間隔很短,只有1毫秒左右,我們現(xiàn)在擔(dān)心的是,會(huì)因?yàn)椴煌瑓^(qū)之間時(shí)間差,以及網(wǎng)絡(luò)延時(shí),導(dǎo)致實(shí)際攻擊效果發(fā)生變 化。考察現(xiàn)有的NTP協(xié)議等技術(shù)手段,通常都只能達(dá)到毫秒級(jí)別,畢竟網(wǎng)絡(luò)延時(shí)擺在哪里,很難解決這種級(jí)別的誤差。高精度的時(shí)間協(xié)議PTP可以達(dá)到毫秒級(jí), 倒可以考慮,但他測(cè)量網(wǎng)絡(luò)延時(shí)的算法個(gè)人認(rèn)為有缺陷。PTP和NTP一樣,對(duì)網(wǎng)絡(luò)延時(shí)的差異做出了假設(shè)。
我認(rèn)為關(guān)于時(shí)間同步上,存在幾個(gè)確定因素:
1、在同一臺(tái)機(jī)器上,他的時(shí)間頻率精度是足夠的,比如每秒多少個(gè)時(shí)鐘周期。
2、AB兩臺(tái)機(jī)器之間時(shí)間差不會(huì)時(shí)間推移而改變,除非作出調(diào)整。這個(gè)可以根據(jù)因素1作出判斷。
從因素2我們知道W = T-TA 是個(gè)常量,當(dāng)T1發(fā)生報(bào)文并T2到達(dá)A區(qū),那么T2-T1==W + D,包含了網(wǎng)絡(luò)時(shí)延和時(shí)差。在NTP和PTP協(xié)議中,都對(duì)D作出了假設(shè),NTP假設(shè)D是一定,而PTP假設(shè)D是可測(cè)量。
我有兩個(gè)方案,事實(shí)上也是基于對(duì)延時(shí)的假設(shè),方案1:
1、假設(shè)在同一局域網(wǎng)內(nèi)每個(gè)客戶端接收到廣播的延時(shí)是一樣。這個(gè)可信度還是很高,在局域網(wǎng)內(nèi),誤差可以少于納秒級(jí)別。
2、在同一局域網(wǎng)內(nèi),存在一個(gè)時(shí)間服務(wù)器S,定時(shí)向整個(gè)局域網(wǎng)廣播當(dāng)前時(shí)間,精度可以達(dá)到納秒NS。
3、當(dāng)A分區(qū)向B分區(qū)發(fā)送關(guān)聯(lián)時(shí),將A區(qū)接收到S的廣播時(shí)間以及關(guān)聯(lián)發(fā)生的時(shí)間也發(fā)送給B。那么B分區(qū)根據(jù)自己接收到S的廣播時(shí)間,能容易推算出A/B兩分區(qū)之間的時(shí)間差。
第二套方案,比較復(fù)雜:
1、S/C都在同樣的本機(jī)時(shí)間點(diǎn)向?qū)Ψ綍r(shí)間報(bào)文,并記錄對(duì)方報(bào)文到達(dá)的時(shí)間。
2、S收到C的時(shí)間報(bào)文后,將本地收到的時(shí)間點(diǎn)封包發(fā)送給C。
3、C根據(jù)收到的報(bào)文推算和S的時(shí)間間隔。
這套方案同樣對(duì)網(wǎng)絡(luò)延時(shí)作出假定,認(rèn)為同時(shí)向?qū)Ψ桨l(fā)送報(bào)文的延時(shí)D1/D2,以及服務(wù)器S緊隨發(fā)送的報(bào)文的延時(shí)D3在發(fā)送時(shí)間越接近的情況下,他們的之間誤差就會(huì)越小。
盡管多個(gè)服務(wù)器之間的時(shí)間同步很重要,但很多情況下,卻無需借助精確的時(shí)間精度,而只需要知道他們發(fā)生的順序就可以了。R1生成的關(guān)聯(lián)A1,R2生成的關(guān)聯(lián)A2,這兩個(gè)關(guān)聯(lián)各自取了所在區(qū)A和B的時(shí)間戳。假設(shè)他們的精度要求為毫秒,而AB區(qū)之間的時(shí)間誤差為N毫秒,網(wǎng)絡(luò)時(shí) 延為M毫秒。當(dāng)A1/A2發(fā)生時(shí),他并不知道對(duì)方的時(shí)間戳,A1通過網(wǎng)絡(luò)傳輸?shù)竭_(dá)B區(qū),作用在R2上面,如果這時(shí)候R2發(fā)生擊退效果,實(shí)際上A2關(guān)聯(lián)并不 發(fā)生。如果A2實(shí)際發(fā)生,表示R2在被擊中的時(shí)候,就已經(jīng)發(fā)生攻擊行為。考察這個(gè)過程,一個(gè)很有趣的現(xiàn)象發(fā)生了。R1/R2之間的關(guān)聯(lián)實(shí)際和時(shí)間之軸沒有 關(guān)系。如果我們一定要在A1/A2打上時(shí)間之軸標(biāo)簽,并嚴(yán)格進(jìn)行排序,實(shí)際上,A1發(fā)生并作用在R2時(shí),我們并不知道A2的存在。
這篇是我寫得最郁悶的,我仔細(xì)研究各種關(guān)于時(shí)間同步的協(xié)議,盡管吹得天花亂墜,可是仔細(xì)研究起來,都做了許多假設(shè),很難讓人信服他們的精度數(shù)據(jù),只能從頭開始自己弄。