我們遊戲專案,剛開始pvp實時戰鬥,就是最簡單的方式:
客戶端發協議,伺服器**指令,伺服器不會存任何狀態,但是假如a發了一條指令,伺服器在**給b的時候,b恰好斷了網,未能及時捕捉,那麼這條指令就永遠丟失了,
當然,b重連回來的時候可以根據a的戰場資料來同步自己的戰場,不過這種做法對客戶端的程式設計要求挺高,而且客戶端要存很多狀態,隨機數和時序都容易出錯,事實上也是如此,
還有一點就是容易在斷線是被外掛程式修改資料。
後面,決定伺服器開房間,做個訊息佇列,專門**指令,這樣首先可以避免,訊息量很頻繁的時候,不能及時響應,但是最終還是能按順序逐條**!
同時這個房間還會存下客戶端傳送的所有指令,這時候假如一方掉線了,這時候伺服器存的整場戰鬥指令[1,2,3,4,5],但是指令5傳送沒成功,重連回來的時候:
1.假如是在戰場中重連回來,那麼掉線一方的客戶端會存有整場戰鬥的指令[1,2,3,4],這時候伺服器給他推送[1,2,3,4,5],他僅僅只需要恢復指令5就行了。
2.假如是在主介面重連回來,即掉線一方的客戶端已經銷毀了所有的戰鬥指令,這時候伺服器給他推送[1,2,3,4,5],他需要全部恢復,才能重現戰場。
linux同步機制
一.併發控制 1 自旋鎖 得不到資源,會原地打轉,直到獲得資源為止 定義自旋鎖 spinlock t spin 初始化自旋鎖 spin lock init lock 獲得自旋鎖 spin lock lock 獲得自旋鎖,如果能立即獲得,則馬上返回,否則自旋在那裡,直到該自旋鎖的保持者釋放 spin ...
MySQL 同步機制
innodb沒有使用作業系統同步機制,而是自己封裝,通過spin 自旋 和wait array 等待佇列 的設計提高效能 目前的cpu都支援tas指令。該指令通過讀取乙個位元組或者乙個word,然後和0比較,並且無條件的將其在記憶體中的值設為1,是原子操作。用到swap atomic操作,將記憶體中...
執行緒同步機制
本週主要學習 執行緒同步機制 互斥量 讀寫鎖和條件變數 和簡單程式的實現,對執行緒同步有了進一步認識 內容如下 執行緒的基本概念,相關函式 互斥量 說明 處於標圓形框之上的線段表示相關的執行緒沒有擁有互斥量 處於圓形框中心線之上的線段表示相關的執行緒等待互斥量 處於圓形框中心線之下的線段表示相關的執...