對於玩家的超時管理,粒度不能太大。要做超時控制的首要原因,是socket連線太長沒有傳送訊息的話,伺服器端應該認為該玩家掛機你時間過長,將其清理出房間,關閉此socekt連線。
這只是伺服器對玩家的時間超時控制的乙個比較明顯的原因,在 遊戲伺服器中,往往會低估 一件事情的複雜程度從而呈現出過多的樂觀主義。 如果考慮下在時間控制的領域內,需要 清除玩家的因素,可以分為這麼幾個:
1. 在房間內掛機時間過長,換句話說就是已經連線的socket過長時間沒有傳送任何資料。
2. 遊戲載入的過程中,如果載入的時間過長,則應關閉此連線,提示玩家重新連線。
3. 玩家要進入遊戲房間前,傳送預約請求包後,預約的時間超過限制,需要關閉。
4. 在踢出玩家的過程中,如果玩家的訊息還沒有傳送完畢,需要給乙個時間專門用來傳送剩下的資料,超過這個時間限制後,就強行退出。
踢出玩家這一功能單元,比較好的機制是狀態管理器的方式, 玩家存在不同的狀態,當每個心跳,處理邏輯的時候,根據玩家的狀態進行不同的處理。 在處理過程中,根據遊戲的運算邏輯更改玩家的狀態屬性,這樣便將 踢出玩家的邏輯原因 和 處理玩家的退出,包括資源清理 進行了分離, 將**進行了解耦。 其實這是屬於玩家的狀態控制, 玩家在不同的狀態進行不同的處理。
在整個伺服器的處理中,socket封裝層專門用來處理網路連線和資料的傳送, 在這一層,是和業務邏輯無關的。 業務層將資料寫入已經開闢的緩衝區中,然後在心跳時,socket封裝層將緩衝區中的資料進行傳送。socket層資料的接收和此類似, poll或者epoll輪詢後,從核心中,將tcp/ip協議中傳輸層裡,核心緩衝區的資料進行讀取,然後寫入soceket封裝層的讀資料快取區,然後根據自己伺服器的與客戶端協商的協議,對資料 進行拆分,然後交由不同的包處理邏輯 執行事件處理。
這樣,在socket封裝層,不應該進行過多的業務邏輯**,否則上層業務將會和下層的封裝相耦合, 在伺服器邏輯 簡單,或者是原型期時,缺點尚不明顯,但是一旦需求開始增多 , 業務**的複雜度會劇烈的上公升, 在初期如果功能模組分得不夠清晰, 那隨後想要進行解耦,將會面臨 巨大的技術風險。 重構從來都是件非常痛苦的事情,原有的架構至少是解決了問題,重新做一遍,需要將整個已經解決掉的問題再重新解決一遍,做這樣的事情,需要知識、經驗、以及義無反顧的勇氣。
所以在這個時期,我會盡肯能的將以往的經驗,加入到新的專案中,不能讓過去出現的錯誤重複的出現。 而且,也需要將已經成熟的專案經驗,累積到下個專案中,這樣團隊的技術積累才會不斷提高, 說直白點,就是
對連線的控制管理,
對時間超時的控制,
對於伺服器群組的管理和分發機制,
對於多執行緒的使用控制,執行緒間的併發控制,對死鎖的控制,
對執行緒間通訊的使用(為了提高效能使用緩衝區資料通訊,特殊要求的話,要用到scocket通訊),
對於資源池的使用,
對於精妙的設計模式的運用,
對於socket層以及io復用的封裝,
對於日誌記錄功能的更好的使用,
對於mysql和mogodb資料庫的設計和調優控制,
對於伺服器的執行平台,linux對於記憶體和執行緒的 管理。(重要而不緊急,是必須要做的事情)
這些是目前最迫切的,那句話還是要不斷的提醒我自己,做之前要不斷的想,做之後要不斷的反思。
伺服器的種類和功能
伺服器的種類和功能 1 www伺服器 www server www伺服器也稱為web伺服器 web server 或http伺服器 http server 它是internet上最常見也是使用最頻繁的 伺服器之一,www伺服器能夠為使用者提供網頁瀏覽 論壇訪問等等服務。比如 我們在使用瀏覽器訪問 的...
ntp伺服器 NTP伺服器的功能特點介紹
現在絕大部分的網路裝置的作業系統都支援ntp通訊協議,比如在unix和windows中都有他們自己的ntp服務功能。比如在windows中的ntp。由於各個系統廠商會根據自己的系統情況對ntp來進行優化和設定,更加適合他自己的系統,對於其他系統的相容性就會差很多。還有不同時期的系統會使用不同版本的n...
Nginx伺服器的負載均衡策略
在伺服器集群中,nginx起到乙個 伺服器的角色 即反向 為了避免單獨乙個伺服器壓力過大,將來自使用者的請求 給不同的伺服器。詳情請檢視我的另一篇部落格。負載均衡用於從 upstream 模組定義的後端伺服器列表中選取一台伺服器接受使用者的請求。乙個最基本的upstream模組是這樣的,模組內的se...