gonet 游戲服務器架構,mmo架構,分布式snowflake64為整形uuid,ai行為樹,配置data,游戲大部分都在內存運算,分布式緩存redis,增加db模塊讀取blob數據。
設計之初,建立在actor模式下的;rpc,以及消息驅動,rpc無需注冊,支持通用數據(int,[]int,[3]int),map數據,以及struct數據,rpc性能測試如下;sql封裝簡單的orm(orm支持pb結構體做mysql blob,orm支持結構體做mysql json類型)具體看demo
websocket模式下,要在net,websocket注視掉如下代碼,在netgateserver里面注釋回//websocket這段
代碼除了mysql,protobuf,redis, etcd這幾個庫以外,其他都是自己寫的,方便性能和修改,主動權在自己手里
服務器之間rpc,客戶端服務器之間protobuf + rpc,客戶端tcp遵從如下消息包頭(支持json,考慮到性能,兩種傳輸協議不兼容,請切換json分支)
前四位 protobuf name 的 crc,中間protobuf字節流, 尾部+結束標志?♡ (結束標志也可以自己定義在base.TCP_END控制) //另外支持包頭大小- 前四位包體大小,再四位protobuf name 的 crc,中間protobuf字節流,代碼注視掉,(搜索tcp粘包固定包頭) 1.支持go mod, gopath可以不需要設置(使用gomod可以使用goproxy代理(GOPROXY=https://goproxy.i ),不然很坑爹)。(也支持go vendor(刪除項目下的go.mod文件),下載這幾個基礎庫,mysql,protobuf,redis,etcd)
// go get github.com/golang/net
// go get github.com/go-sql-driver/mysql
// go get github.com/gomodule/redigo/redis
// go get go.etcd.io/etcd/client
// go get github.com/golang/protobuf
2.下載etcd做服發現(new),(redis做排行榜,全局緩存,可選)
3.bin目錄下的sxz_server.cfg配置數據庫以及端口
4.數據庫在sql文件目錄下生產
5.win下執行build.bat,start.bat
6.linux下執行build.sh,start.sh
有問題可以加qq群:950288306
目前游戲庫分類:
1.actor核心庫,actor模式的雛形。
2.base基礎庫,分裝rpc以及其他基礎庫。
3.db庫,mysql,支持簡單orm,沒有重度gorm,更加輕便,還在受gorm 0 nil “” 數據庫更新就失敗的痛苦嗎。還在忍受重度gorm帶來sql語句都不知道怎么寫,沒錯這個是輕度的。
4.message庫,pb用於傳輸協議。
5.nework庫,網絡庫,tcp,websocket網絡管理。rd庫,redis庫,做一些集群唯一緩存用。
6.client,測試客戶端源碼,包括go和lua的源碼
目前游戲模塊:
1.account賬號服務,提供注冊賬號,登錄校驗,集群服務。
2.natgate網關服務,所有對外都是通過網關轉發,集群服務。
3.world世界服務,所有邏輯,集群服務。
4.第三方中間件:etcd分布式服發現,redis分布式緩存。