> 文章列表 > 【从零开始学Skynet】实战篇《球球大作战》(十一):测试登录流程

【从零开始学Skynet】实战篇《球球大作战》(十一):测试登录流程

【从零开始学Skynet】实战篇《球球大作战》(十一):测试登录流程

终于可以测试work协议了。只要走得通,就代表完成了整套底层框架。

1、主服务修改

        我们重新修改主服务,让它智能一些,根据配置文件自动开启服务,无须手动设置。如下代码所示

local skynet = require "skynet"
local skynet_manager = require "skynet.manager"
local runconfig = require "runconfig"
local cluster = require "skynet.cluster"skynet.start(function()--初始化local mynode = skynet.getenv("node")local nodecfg = runconfig[mynode]--节点管理local nodemgr = skynet.newservice("nodemgr","nodemgr", 0)skynet.name("nodemgr", nodemgr)--集群cluster.reload(runconfig.cluster)cluster.open(mynode)--gatefor i, v in pairs(nodecfg.gateway or {}) dolocal srv = skynet.newservice("gateway","gateway", i)skynet.name("gateway"..i, srv)end--loginfor i, v in pairs(nodecfg.login or {})  dolocal srv = skynet.newservice("login","login", i)skynet.name("login"..i, srv)end--agentmgrlocal anode = runconfig.agentmgr.nodeif mynode == anode thenlocal srv = skynet.newservice("agentmgr", "agentmgr", 0)skynet.name("agentmgr", srv)elselocal proxy = cluster.proxy(anode, "agentmgr")skynet.name("agentmgr", proxy)end	--退出自身skynet.exit()
end)

        主服务先开启nodemgr(每个节点必有一个),加载cluster(用于跨节点通信),再根据配置依次开启节点内的gate、login等服务。由于nodemgr、gateway、login是“本地服务”,因此使用skynet.name给它命名。agentmgr是“全局服务”,如果它在其他节点,则使用cluster.proxy创建一个代理。

2、代码测试

(1)登录测试

        开启节点1运行游戏服务端,使用telnet测试的结果如下图所示。

      该图所示的结果表示客户端发送login登录id为101的角色,然后两次发送work协议,每次“打工”金币都会增加。成功执行这一流程意味着服务端框架已经成型,可以在它基础上开发游戏逻辑。

 (2)顶号测试

  我们再开启一个客户端登录同一个账号,运行结果如下图所示,顶号成功。

 

3、跨节点测试

        单个节点只能部署在一台物理机上,它能承载数千玩家。如果要支撑更多,就需要开启多个节点,如下图所示,请确保节点2的配置文件etc/config.node2存在,它的内容和config.node1一样,仅仅是将node项改成了“node2”。

         设置完成后可以开启两个节点进行测试,让不同的客户端连接不同节点的gateway,它们应该都能正常工作。还可以尝试修改配置进行测试,比如将agentmgr放在节点2上,程序也应该能正常工作。

说明:如果开启多个节点,对开启顺序会有要求,应先开启agentmgr所在的节点,再开启其他,否则会报错。

 

完整代码地址:https://gitee.com/frank-yangyu/ball-server