ECS lockstep 實現實時同步

2021-10-08 11:19:51 字數 839 閱讀 4155

最近在公司用 lua 寫戰鬥邏輯,對ecs這套結構理解 比以前深刻了很多。脫離開公司業務 之後,我自己又在 unity 裡用 c# 實現 了一套 ecs的結構, 寫了一小 demo . 在 ecs 的 結構下 , 業務擴充套件變得非常 靈活, 因為舊有**邏輯導致新功能不好實現的情況 也變得很少了。ecs思維方式,實在太適合寫遊戲戰鬥邏輯了。

用了這套結構寫了乙個 demo 之後,我又嘗試在它的基礎上,加上 lockstep 的機制 ,實現區域網 實時同步。 之前一直在做這樣的嘗試 , 搞起來很吃力。沒想到 這次搞起來非常 順利。 客戶端是 unity + c# , 伺服器用的 c# + socket 。 網路通訊模組並沒有使用 c# 封裝的 tcp 相關 的類庫,而是用 的 socket 層的 api ,更貼近 c++ socket 的寫法。

這次的順利實現,主要要歸功於以下 幾點:

客戶端的邏輯採用 ecs 結構 ,**靈活清晰

伺服器使用 c# 的 socket 介面,易用性上 比 c++ 簡單

伺服器 socket 通訊採用 了 select 和 poll 的方式,比開啟大量執行緒業務處理要簡單清晰

成功解決了 tcp 位元組流的粘包 、半包問題

經歷了一番努力之後,之前一直夢寐以求的 lockstep 幀同步,終於實現成功了。看著多個機器之間 完美同步,非常有成就感。

**倉庫貼在這裡:

clone 下來之後,裡面的 ebb 資料夾 是 unity 客戶端專案, ebbs 是 c# 伺服器專案 。 為了防止現在的 成果被改壞 ,我 打了個 tag ,名字叫 base_lock_step_code

今天在這發個部落格,算是給 自己實現了區域網實時 同步做個紀念,具體實現細節和注意點,有空再逐一進行總結

PHP實現實時輸出

這個問題是在本地的環境中發現的。指令碼輸出的內容要等全部執行完畢後才會輸出,而sae是實時輸出的,避免了長時間等待。網上摘錄,純筆記。header content type text html charset utf 8 設定執行時間不限時 set time limit 0 清除並關閉緩衝,輸出到瀏...

ajax實現實時校驗

有時候我們在註冊使用者時候我們輸入使用者名稱,他會提示使用者名稱已存在,我們該怎麼去實現他呢?我們要實現以下 訪問控制器後,控制器去資料庫進行查詢是否有該使用者名稱的存在,如果有就返回查詢的資料結果 根據使用者名稱查詢到資料條數 再用非同步請求回應 response.getwriter write ...

rsync inotify實現實時同步

服務端 一 首先安裝rsync,接著編輯配置檔案,若沒有,自己手動建立也可 rsync xinetd rsync最好是3.0以上版本,演算法更優,速度更快.xinetd 監控管理rsync服務 etc rsyncd.conf uid www gid www use chroot no max con...