青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

 同步在網(wǎng)絡(luò)游戲中是非常重要的,它保證了每個玩家在屏幕上看到的東西大體是一樣的。其實(shí)呢,解決同步問題的最簡單的方法就是把每個玩家的動作都向其他玩家廣播一遍,這里其實(shí)就存在兩個問題:1,向哪些玩家廣播,廣播哪些消息。2,如果網(wǎng)絡(luò)延遲怎么辦。事實(shí)上呢,第一個問題是個非常簡單的問題,不過之所以我提出這個問題來,是提醒大家在設(shè)計自己的消息結(jié)構(gòu)的時候,需要把這個因素考慮進(jìn)去。而對于第二個問題,則是一個挺麻煩的問題,大家可以來看這么個例子:

  比如有一個玩家A向服務(wù)器發(fā)了條指令,說我現(xiàn)在在P1點(diǎn),要去P2點(diǎn)。指令發(fā)出的時間是T0,服務(wù)器收到指令的時間是T1,然后向周圍的玩家廣播這條消息,消息的內(nèi)容是“玩家A從P1到P2”有一個在A附近的玩家B,收到服務(wù)器的這則廣播的消息的時間是T2,然后開始在客戶端上畫圖,A從P1到P2點(diǎn)。這個時候就存在一個不同步的問題,玩家A和玩家B的屏幕上顯示的畫面相差了T2-T1的時間。這個時候怎么辦呢?

  有個解決方案,我給它取名叫 預(yù)測拉扯,雖然有些怪異了點(diǎn),不過基本上大家也能從字面上來理解它的意思。要解決這個問題,首先要定義一個值叫:預(yù)測誤差。然后需要在服務(wù)器端每個玩家連接的類里面加一項(xiàng)屬性,叫TimeModified,然后在玩家登陸的時候,對客戶端的時間和服務(wù)器的時間進(jìn)行比較,得出來的差值保存在TimeModified里面。還是上面的那個例子,服務(wù)器廣播消息的時候,就根據(jù)要廣播對象的TimeModified,計算出一個客戶端的CurrentTime,然后在消息頭里面包含這個CurrentTime,然后再進(jìn)行廣播。并且同時在玩家A的客戶端本地建立一個隊(duì)列,保存該條消息,只到獲得服務(wù)器驗(yàn)證就從未被驗(yàn)證的消息隊(duì)列里面將該消息刪除,如果驗(yàn)證失敗,則會被拉扯回P1點(diǎn)。然后當(dāng)玩家B收到了服務(wù)器發(fā)過來的消息“玩家A從P1到P2”這個時候就檢查消息里面服務(wù)器發(fā)出的時間和本地時間做比較,如果大于定義的預(yù)測誤差,就算出在T2這個時間,玩家A的屏幕上走到的地點(diǎn)P3,然后把玩家B屏幕上的玩家A直接拉扯到P3,再繼續(xù)走下去,這樣就能保證同步。更進(jìn)一步,為了保證客戶端運(yùn)行起來更加smooth,我并不推薦直接把玩家拉扯過去,而是算出P3偏后的一點(diǎn)P4,然后用(P4-P1)/T(P4-P3)來算出一個很快的速度S,然后讓玩家A用速度S快速移動到P4,這樣的處理方法是比較合理的,這種解決方案的原形在國際上被稱為(Full plesiochronous),當(dāng)然,該原形被我篡改了很多來適應(yīng)網(wǎng)絡(luò)游戲的同步,所以而變成所謂的:預(yù)測拉扯。

  另外一個解決方案,我給它取名叫 驗(yàn)證同步,聽名字也知道,大體的意思就是每條指令在經(jīng)過服務(wù)器驗(yàn)證通過了以后再執(zhí)行動作。具體的思路如下:首先也需要在每個玩家連接類型里面定義一個TimeModified,然后在客戶端響應(yīng)玩家鼠標(biāo)行走的同時,客戶端并不會先行走動,而是發(fā)一條走路的指令給服務(wù)器,然后等待服務(wù)器的驗(yàn)證。服務(wù)器接受到這條消息以后,進(jìn)行邏輯層的驗(yàn)證,然后計算出需要廣播的范圍,包括玩家A在內(nèi),根據(jù)各個客戶端不同的TimeModified生成不同的消息頭,開始廣播,這個時候這個玩家的走路信息就是完全同步的了。這個方法的優(yōu)點(diǎn)是能保證各個客戶端之間絕對的同步,缺點(diǎn)是當(dāng)網(wǎng)絡(luò)延遲比較大的時候,玩家的客戶端的行為會變得比較不流暢,給玩家?guī)砗懿凰母杏X。該種解決方案的原形在國際上被稱為(Hierarchical master-slave synchronization),80年代以后被廣泛應(yīng)用于網(wǎng)絡(luò)的各個領(lǐng)域。

  最后一種解決方案是一種理想化的解決方案,在國際上被稱為Mutual synchronization,是一種對未來網(wǎng)絡(luò)的前景的良好預(yù)測出來的解決方案。這里之所以要提這個方案,并不是說我們已經(jīng)完全的實(shí)現(xiàn)了這種方案,而只是在網(wǎng)絡(luò)游戲領(lǐng)域的某些方面應(yīng)用到這種方案的某些思想。我對該種方案取名為:半服務(wù)器同步。大體的設(shè)計思路如下:

  首先客戶端需要在登陸世界的時候建立很多張廣播列表,這些列表在客戶端后臺和服務(wù)器要進(jìn)行不及時同步,之所以要建立多張列表,是因?yàn)橐獜V播的類型是不止一種的,比如說有l(wèi)ocal message,有remote message,還有g(shù)lobal message 等等,這些列表都需要在客戶端登陸的時候根據(jù)服務(wù)器發(fā)過來的消息建立好。在建立列表的同時,還需要獲得每個列表中廣播對象的TimeModified,并且要維護(hù)一張完整的用戶狀態(tài)列表在后臺,也是不及時的和服務(wù)器進(jìn)行同步,根據(jù)本地的用戶狀態(tài)表,可以做到一部分決策由客戶端自己來決定,當(dāng)客戶端發(fā)送這部分決策的時候,則直接將最終決策發(fā)送到各個廣播列表里面的客戶端,并對其時間進(jìn)行校對,保證每個客戶端在收到的消息的時間是和根據(jù)本地時間進(jìn)行校對過的。那么再采用預(yù)測拉扯中提到過的計算提前量,提高速度行走過去的方法,將會使同步變得非常的smooth。該方案的優(yōu)點(diǎn)是不通過服務(wù)器,客戶端自己之間進(jìn)行同步,大大的降低了由于網(wǎng)絡(luò)延遲而帶來的誤差,并且由于大部分決策都可以由客戶端來做,也大大的降低了服務(wù)器的資源。由此帶來的弊端就是由于消息和決策權(quán)都放在客戶端本地,所以給外掛提供了很大的可乘之機(jī)。

  綜合以上三種關(guān)于網(wǎng)絡(luò)同步派系的優(yōu)缺點(diǎn),綜合出一套關(guān)于網(wǎng)絡(luò)游戲傳輸同步的較完整的解決方案,我稱它為綜合同步法(colligate synchronization)。大體設(shè)計思路如下:

  首先將服務(wù)器需要同步的所有消息從劃分一個優(yōu)先等級,然后按照3/4的比例劃分出重要消息和非重要消息,對于非重要消息,把決策權(quán)放在客戶端,在客戶端邏輯上建立相關(guān)的決策機(jī)構(gòu)和各種消息緩存區(qū),以及相關(guān)的消息緩存區(qū)管理機(jī)構(gòu).

  對于非重要消息,客戶端的大體處理流程,其中有一個客戶端被動行為值得大家注意,其中包括對服務(wù)器發(fā)過來的某些驗(yàn)證代碼做返回,來確保消息緩存中的消息和服務(wù)器端是一致的,從而有效的防止外掛來篡改本地消息緩存。其中的消息來源是包括本地的客戶端響應(yīng)玩家的消息以及遠(yuǎn)程服務(wù)器傳遞過來的消息。

  對于重要消息,比如說戰(zhàn)斗或者是某些牽扯到玩家一些比較敏感數(shù)據(jù)的操作,則采用另外一套方案,該方案首先需要在服務(wù)器和客戶端之間建立一套Ping System,然后服務(wù)器保存和用戶的及時的ping值,當(dāng)ping比較小的時候,響應(yīng)玩家消息的同時先不進(jìn)行動作,而是先把該消息反饋給服務(wù)器,并且阻塞,服務(wù)器收到該消息,進(jìn)行邏輯驗(yàn)證之后向所有該詳細(xì)廣播的有效對象進(jìn)行廣播(包括消息發(fā)起者),然后客戶端收到該消息的驗(yàn)證,才開始執(zhí)行動作。而當(dāng)ping比較大的時候,客戶端響應(yīng)玩家消息的同時立刻進(jìn)行動作,并且同時把該消息反饋給服務(wù)器,值得注意的是這個時候還需要在本地建立一個無驗(yàn)證消息的隊(duì)列,把該消息入隊(duì),執(zhí)行動作的同時等待服務(wù)器的驗(yàn)證,還需要保存當(dāng)前狀態(tài)。服務(wù)器收到客戶端的請求后,進(jìn)行邏輯驗(yàn)證,并把消息反饋到各個客戶端,帶上各個客戶端校對過的本地時間。如果驗(yàn)證通過不過,則通知消息發(fā)起者,該消息驗(yàn)證失敗,然后客戶端自動把已經(jīng)在進(jìn)行中的動作取消,恢復(fù)原來狀態(tài)。如果驗(yàn)證通過,則廣播到的各個客戶端根據(jù)從服務(wù)器獲得校對時間進(jìn)行對其進(jìn)行拉扯,保證在該行為完成之前完成同步。

 

  至此,一個比較成熟的網(wǎng)絡(luò)游戲的同步機(jī)制已經(jīng)初步建立起來了,接下來的邏輯代碼就根據(jù)各自不同的游戲風(fēng)格以及側(cè)重點(diǎn)來寫了。

  同步是網(wǎng)絡(luò)游戲最重要的問題,如何同步也牽扯到各個方面的問題,比如說游戲的規(guī)模,游戲的類型以及各種各樣的方面,對于規(guī)模比較大的游戲,在同步方面可以下很多的工夫,把消息分得十分的細(xì)膩,對于不同的消息采用不同的同步機(jī)制,而對于規(guī)模比較小的游戲,則可以采用大體上一樣的同步機(jī)制,究竟怎么樣同步,沒有個定式,是需要根據(jù)自己的不同情況來做出不同的同步?jīng)Q策的



網(wǎng)游同步算法之導(dǎo)航推測(Dead Reckoning)算法:


  在了解該算法前,我們先來談?wù)勗撍惴ǖ囊恍┍尘百Y料。大家都知道,在網(wǎng)絡(luò)傳輸?shù)臅r候,延遲現(xiàn)象是很普遍的,而在基于Server/Client結(jié)構(gòu)下的網(wǎng)絡(luò)游戲的同步也就成了很頭疼的問題,在保證客戶端響應(yīng)用戶本地指令流暢的情況下,沒法有效的保證的同步的及時性。同樣,在軍方也有類似的事情發(fā)生,即使是同一LAN里面的機(jī)器,也會因?yàn)閭鬏數(shù)难舆t,導(dǎo)致一些運(yùn)算的失誤,介于此,美國國防部投入了大量的資金用于研究一種比較的好的方案來解決分布式系統(tǒng)中的延遲問題,特別是一個叫分布式模擬運(yùn)動(Distributed Interactive Simulation)的系統(tǒng),這套系統(tǒng)呢,其中就提出了一套號稱是Latency Hiding & Bandwidth Reduction的方案,命名為Dead Reckoning。呵呵,來頭很大吧,恩,那么我們下面就來看看這套系統(tǒng)的一些觀點(diǎn),以及我們?nèi)绾伟阉\(yùn)用到我們的網(wǎng)絡(luò)游戲的同步中。
Posted on 2010-07-08 15:57 鄭興鋒 閱讀(964) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲美女在线视频| 国内精品亚洲| 一区二区三区四区精品| 久久综合国产精品| 亚洲在线视频免费观看| 亚洲激情女人| 在线观看日韩av先锋影音电影院| 国产女精品视频网站免费| 欧美日韩色综合| 欧美大片va欧美在线播放| 老司机精品福利视频| 久久精品九九| 亚洲片区在线| 99精品视频一区二区三区| 99国产精品久久久久久久成人热| 亚洲精品久久久久久久久久久久| 欧美激情麻豆| 最新热久久免费视频| 99精品视频免费观看视频| 国产精品99久久久久久久vr| 日韩图片一区| 亚洲一区免费网站| 亚洲一区制服诱惑| 亚洲精华国产欧美| 午夜一区二区三视频在线观看 | 亚洲综合电影| 妖精成人www高清在线观看| 一区二区三区四区精品| 午夜欧美精品久久久久久久| 香港久久久电影| 欧美日本一区| 国产伦精品一区二区三区视频黑人 | 中日韩高清电影网| 午夜久久影院| 麻豆精品视频在线观看| 亚洲午夜三级在线| 欧美影院精品一区| 欧美成人国产| 在线综合+亚洲+欧美中文字幕| 亚洲欧美日韩一区二区三区在线| 久久成人免费电影| 欧美久久久久久久久| 伊大人香蕉综合8在线视| 亚洲九九精品| 久久狠狠亚洲综合| 亚洲精品一区二区在线观看| 猛干欧美女孩| 久久久久综合一区二区三区| 亚洲人成网站精品片在线观看| 欧美一二区视频| 国产精品观看| 亚洲先锋成人| 夜夜嗨av一区二区三区网页 | 亚洲性视频网址| 欧美黄色免费网站| 亚洲青色在线| 欧美国产视频在线| 久久在线免费观看| 欲色影视综合吧| 久久一区二区三区av| 小黄鸭精品aⅴ导航网站入口| 国产精品白丝av嫩草影院| 一区二区三区精密机械公司| 亚洲激精日韩激精欧美精品| 欧美多人爱爱视频网站| 亚洲美女视频在线观看| 91久久夜色精品国产网站| 免费一级欧美片在线播放| 亚洲国产专区| 亚洲欧洲一区二区在线播放| 欧美精品在线免费播放| 亚洲肉体裸体xxxx137| 亚洲国内在线| 欧美午夜大胆人体| 亚洲欧美日韩国产成人| 亚洲自拍偷拍麻豆| 国产一区二区精品丝袜| 久久亚洲综合色| 快播亚洲色图| 亚洲桃花岛网站| 亚洲性夜色噜噜噜7777| 国产一区二区成人久久免费影院| 免费亚洲一区二区| 欧美精品 国产精品| 亚洲制服欧美中文字幕中文字幕| 亚洲男人av电影| 伊人久久亚洲影院| 亚洲精品无人区| 国产精品视频999| 免费久久精品视频| 欧美日韩免费观看一区=区三区| 亚洲欧美精品在线观看| 久久久之久亚州精品露出| 99视频精品免费观看| 亚洲婷婷综合色高清在线| 国产综合精品| 亚洲乱码国产乱码精品精98午夜| 国产伦精品免费视频| 美女日韩在线中文字幕| 欧美日韩一区视频| 欧美成人午夜视频| 国产精品久久二区| 欧美激情网站在线观看| 国产精品久久9| 亚洲激情成人网| 一区二区三区中文在线观看 | 久久久夜夜夜| 国产一区二区三区日韩欧美| 亚洲人成网站精品片在线观看| 亚洲视频中文字幕| 亚洲肉体裸体xxxx137| 亚洲欧美激情视频在线观看一区二区三区| 国产一区二区中文字幕免费看| 亚洲人成在线观看| 在线观看日韩国产| 亚洲免费在线电影| 亚洲开发第一视频在线播放| 午夜亚洲一区| 午夜精品亚洲一区二区三区嫩草| 欧美成人亚洲成人| 葵司免费一区二区三区四区五区| 国产精品ⅴa在线观看h| 亚洲国产午夜| 亚洲国产天堂久久综合| 欧美在线观看一区| 欧美亚洲一区三区| 国产精品成人播放| 一区二区激情视频| 亚洲午夜激情网页| 欧美日韩亚洲高清| 亚洲精一区二区三区| 91久久中文| 美女视频黄a大片欧美| 噜噜爱69成人精品| 永久免费视频成人| 久久人91精品久久久久久不卡| 久久久午夜视频| 极品尤物一区二区三区| 久久gogo国模裸体人体| 久久久久久久久一区二区| 国产欧美午夜| 先锋影音一区二区三区| 久久久国产精品一区| 国内视频一区| 欧美制服丝袜第一页| 国产伦精品免费视频 | 乱中年女人伦av一区二区| 欧美在线999| 国一区二区在线观看| 久久激情久久| 久久精品一本久久99精品| 国内久久视频| 久久久精品国产99久久精品芒果| 久久久久国色av免费观看性色| 狠狠色噜噜狠狠色综合久| 久久久久久久999| 亚洲国产精品专区久久| 一区二区不卡在线视频 午夜欧美不卡在 | 牛牛精品成人免费视频| 欧美电影免费观看| 日韩天堂在线视频| 亚洲日本va午夜在线影院| 国产午夜精品一区二区三区视频| 亚洲视频在线观看三级| 午夜精品美女久久久久av福利| 国产精品一区二区三区成人| 校园春色国产精品| 久久久精品一区二区三区| 在线播放中文一区| 欧美麻豆久久久久久中文| 99热免费精品在线观看| 久久9热精品视频| 亚洲国产视频一区| 欧美日韩一区在线| 亚洲一区国产精品| 欧美电影资源| 午夜精品一区二区三区在线| 一区二区在线观看视频| 欧美国产日产韩国视频| 亚洲欧美国产精品专区久久| 久久久久久久久蜜桃| 一区二区三区高清视频在线观看| 国产精品视频yy9299一区| 裸体素人女欧美日韩| 亚洲深夜福利| 免费日本视频一区| 一区二区三区高清不卡| 国产视频精品va久久久久久| 欧美电影免费| 欧美在线亚洲在线| 一区二区国产日产| 免费在线观看一区二区| 亚洲欧美国产制服动漫| 亚洲精品自在久久| 国产一区二区三区丝袜| 欧美色中文字幕| 欧美国产成人在线| 欧美在线精品一区| 亚洲影音一区| 日韩一区二区电影网|