最近作玩票性質的遊戲項目,客戶端技術是 unity3d 和 android。團隊因爲缺乏遊戲網絡層的設計經驗,因而就採用市面上比效經常使用的服務器 photon 來作。java
具體到語言:unity3d 使用 c# , android 使用 java,使用 photon 使用 c# 。node
作技術選型的時候,想了好久,想統一技術的基礎,也就是說服務器端也採用 c#, 嘗試 c# 寫了幾個小 demo,以爲本身仍是缺乏必要的技能,因而仍是選擇了熟悉的工具 node.js。android
因爲 photon 是 c# 爲主要核心的,因此還要選擇 photon 與 node.js 的網絡層協議,在網上找了一圈,發現 grpc 不錯,而後寫了一個 demo 互相能調通,就決定以 node.js + grpc 作爲構建項面的核心來作。git
規劃一下項目的總體結構以下圖所示:web
很是簡單。sql
pikachu-net,就是以 photon 爲核心的遊戲服務器,它管理全部的 unity3d 客戶端的鏈接,長鏈接的形式,是有狀態的。會把全部的業務相關的請求轉發到 pikachu-node,如登陸,註冊等。數據庫
pikachu-node, 主要是業務處理邏輯,能遊戲的登陸等。pikachu-net 與 pikachu-node 之間用 grpc 進行鏈接。pikachu-node 作成了沒有狀態服務,因此能夠部署成集羣的形式。express
下面詳細說說 pikachu-node 的實現:c#
因爲遊戲跟地理位置有關,因此使用了 postgis/postgresql,node.js 下面就使用 knex.js 作爲鏈接工具。windows
市面上也沒有對 grpc 的多個服務的集成使用經驗,因此參考 express 的中間件設計理念,本身設計一個 node.js 的 grpc 框架用來組織代碼的結構。
在node.js 中 grpc 沒有使用 靜態編繹模式,而是直接把 proto 文件進行載入的形式進行處理。
代碼管理使用 oschina git 的私庫。服務器使用 阿里雲,系統是 windows 的,沒有辦法 photon 只能布在 windows 上。
部署代碼開始一段時間,是使用 ftp 進行拷貝,發現太難受了。因而用 oschina git 的 webhook 和 express 寫了一個發佈服務,當個人代碼推到 git 上時,就自動更新代碼,重啓服務,事實證實,這項工做太明智了,省了不少的時間。
node.js 的代碼服務都是使用 pm2 進行管理的。
以後日誌的查看也是一個問題,由於windows 上沒有 ssh,只能用遠程登陸來查看,當前win只有一個用戶,因此不能兩我的同時在線,新的會把舊的踢下線,這是多煩,每次查看日誌只能叫我來看,因而用 express + socket.io 開發了一個簡單的網頁版的日誌查看頁面。這下世界都安靜了。
pikachu-net,每次都是在本地編繹好,而後上傳到服務器,後來我也把這個加入到發佈服務,以後就能推上代碼直接重啓服務。
以後的規劃:
數據庫管理要作起來,由於目前數據庫字段都是手工創建,若是要佈一個測試環境,就很難受。
沒有文檔,這個文篇就算一篇文檔吧。