-
Notifications
You must be signed in to change notification settings - Fork 41
进阶使用
sundream edited this page Jun 20, 2019
·
3 revisions
ggApp公共协议放在tools/proto下,以sproto为例,新增请求C2GS_AreYouOk
,回复GS2C_IamFine
- 新增tools/proto/sproto/test.sproto文件,内容如下
# [100,200)
# C2GS
C2GS_AreYouOk 100 {
request {
speaker 0 : string
}
}
# GS2C
GS2C_IamFine 150 {
request {
speaker 0 : string
}
}
- 生成二进制协议,并且同步到gameserver,client,robot
cd ~/ggApp/tools/proto/sproto
sh run_on_change.sh
如果提示: ignore copy,because GGAPP_ROOT not set!,则先到~/ggApp目录下执行sh setup_linux.sh
- 新增gameserver/src/app/net/test.lua,内容如下:
local nettest = nettest or {
C2GS = {},
GS2C = {},
}
local C2GS = nettest.C2GS
local GS2C = nettest.GS2C
function C2GS.AreYouOk(linkobj,message)
local args = message.args
gg.client:sendpackage(linkobj,"GS2C_IamFine",{
speaker = args.speaker,
})
end
function __hotfix(module)
gg.hotfix("app.net.net")
end
return nettest
self:register_module("test",require("app.net.test"))
- 热更协议+协议处理脚本
cd ~/ggApp/gameserver/shell
sh gm.sh 0 hotfix 'proto.sproto.all.spb'
sh gm.sh 0 hotfix 'app.net.test'
- 重启客户端,发送C2GS_AreYouOk看看效果
cd ~/ggApp
client/3rd/lua/lua client/app/app.lua
# 执行如下指令
linkobj = connect("127.0.0.1",8888)
linkobj:send_request("C2GS_AreYouOk",{speaker="lgl"})
-
数据库
- 支持类型
当前支持mongodb,redis两种数据库,默认使用mongodb - 游戏服
可在gameserver/src/app/config/custom.config中更改db_type,db_config字段来配置 - 登录服
可在gameserver/app/lua/server/account/custom.lua中更改db_type,db_config字段来配置
- 支持类型
-
编码协议
- 支持类型
当前支持json,protobuf,sproto三种编码协议,默认使用json - 游戏服
可在gameserver/src/app/config/custom.lua中更改proto字段来配置 - 客户端
可在client/app/config.lua中更改proto字段来配置 - 压测工具
可在robot/app/config/custom.lua中更改proto字段来配置
- 支持类型
-
游戏服网关
-
支持类型
当前支持3类网关,分别为tcp,kcp,websocket,默认3个网关均开启,可在gameserver/src/app/config/gameserver_xxx.config中配置,默认http_port=8886,websocket_port=8887,tcp_port=8888,kcp_port=8889,如果去掉配置则不开启对应类型网关,当然你也可以更改端口。你可以平等的混合使用不同网关,也可以主从使用不同网关(比如以tcp为主,kcp为辅,并建立tcp和kcp的主从关系,当tcp绑定玩家后,玩家即可选择使用tcp/kcp来发送协议) -
握手方式
- 支持类型
nil/false--不握手,"nil"--握手告知客户端不加密,其他--握手时和客户端协商密钥,默认不进行握手 - 游戏服
可在gameserver/src/app/config/common.config中更改encrypt_algorithm字段来配置 - 客户端
修改client/app/config.lua中handshake字段,true--进行握手,false--不进行握手 - 压测工具
修改robot/app/config/custom.lua中handshake字段,true--进行握手,false--不进行握手
- 支持类型
-
tcp为主,kcp为辅与服务器通信
主从关系与服务器通信要求开启握手,用户可以选择在握手阶段是否建立主从关系,使用client演示如下:cd ~/ggApp client/3rd/lua/lua client/app/app.lua # 建立tcp连接 tcpoobj = connect("127.0.0.1",8888) # 开启握手后,连接完毕可以获得服务端的tcp连接ID print(tcpobj.linkid) # 建立kcp连接,并且与tcp连接建立主从关系 kcpobj = kcp_connect("127.0.0.1",8889,tcpobj.linkid) 主从关系建立后,服务端生成的tcp连接对象身上的slave字段即为kcp连接对象,kcp连接对象身上的master字段即为tcp连接对象,因此 // tcp方式通信 gg.client:sendpackage(tcp_linkobj,协议名,协议参数) // kcp方式通信 gg.client:sendpackage(tcp_linkobj.slave,协议名,协议参数) 假定tcp_linkobj在服务端绑定了player玩家(登陆完毕后连接对象会和玩家绑定),通过玩家通信方式如下 // 使用玩家ID通信(默认用绑定玩家的连接对象通信,这里即为tcp_linkobj) gg.client:sendpackage(player.pid,协议名,协议参数) // tcp方式通信 gg.client:sendpackage(player.linkobj,协议名,协议参数) // kcp方式通信 gg.client:sendpackage(player.linkobj.slave,协议名,协议参数)
-