1. 程式人生 > >[投稿]一年工作總結 (單程序網遊伺服器框架介紹)

[投稿]一年工作總結 (單程序網遊伺服器框架介紹)

工作已經滿一年了。。。記得還是去年十月多的時候來廣州找工作的,找了大概一個星期左右,然後找到這家公司後就一直待到現在。今年畢業的時候回了趟學校,到現在工作時間大概有一年了。第一個手遊專案已經上線有一段時間了,還不知道盈利情況怎麼樣,又開始了一個新的卡牌遊戲。工作一直挺充實的,第一個專案的從零開始我就加入了專案組,從頭至尾參與了專案的研發,感覺收穫還是有點的,但一時又想不到怎麼說。現在新的卡牌遊戲用的是上一個專案的框架。既然不知道總結什麼,我就把遊戲服務端框架說一說吧。

Sanjose

對著上面的框架圖來說,首先是閘道器FGGateway,作為一個連線伺服器,處理服務端和客戶端的連線,對應的資料分配。我公司是用libevent實現的。程式碼量很少,方便移植。

邏輯伺服器FGServer和FGClient所使用的網路使用select實現的,同一套程式碼,從網路的角度這邏輯伺服器也是一個客戶端。

FGClient連線FGServer的過程圖上沒說到FGGateway的中轉過程,這裡簡單說下流程:

FGServer

FGServer 呼叫 connect 連線FGGateway,
連線成功,FGServer傳送第一條協議給FGGateway,攜帶裝置資訊告訴FGGateway說自己是服務端。
FGGateway 驗證裝置資訊,成功則把FGServer加到線上伺服器列表中。
FGClient

FGClient 呼叫 connect 連線FGGateway,
連線成功,FGClient傳送第一條協議給FGGateway,攜帶裝置資訊告訴FGGateway是說自己是客戶端。
FGGateway 把FGClient儲存到客戶端佇列,
FGClient 傳送第二條協議獲取線上伺服器列表,FGGateway返回線上伺服器列表。
FGClient 傳送第三條協議:選服協議,FGGateway把FGClient和FGServer繫結。
FGClient 接下來發送協議都會直接轉發到FGServer。FGServer傳送協議也會根據客戶端的fd直接轉發到FGClient。
FGServer和FGShmDB的互動,FGShmDB是用共享記憶體實現的記憶體資料庫,只是簡單的實現資料庫的資料載入到記憶體,不支援資料從記憶體中移除,只是將用到的資料庫中的資料按需載入到記憶體中,這樣一來讀取資料的速度會加快(第一次是從資料庫中加載出來放到記憶體中,之後都是直接操作記憶體)。然後FGServer就是操作FGShmDB分享出來的記憶體。

FGLogin 是比較簡單的一個http服務。主要是接收客戶端的url請求,返回伺服器列表給客戶端。用於集合伺服器。現在是直接用libevent的http實現的,用lua包裝了一下。主要實現了使用者註冊,修改密碼,使用者登入,獲取伺服器列表等操作。其實可以用php實現它的,不知為啥會選用c。