golang websocket绑定用户_探索 Golang 云原生游戏服务器开发,硬核实战之调试 NanoServer 生产级麻将游戏服务器...

介绍

这是一个系列

  1. 探索 Golang 云原生游戏服务器开发,5 分钟上手 Nano 游戏服务器框架 | https://juejin.im/post/6870388583019872270 

  2. 探索 Golang 云原生游戏服务器开发,根据官方示例实战Gorilla WebSocket的用法 | https://juejin.im/post/6872641375297339399

  3. 探索 Golang 云原生游戏服务器开发,Nano 内置分布式游戏服务器方案测试用例 | https://juejin.im/post/6877028133116706823

  4. 探索 Golang 云原生游戏服务器开发,Nano 分布式(集群)示例(Distributed Chat) | https://juejin.im/post/6878706308682350605

示例仓库

  • 官方仓库:nanoserver | https://github.com/lonng/nanoserver

  • 为方便使用 Docker Compose 进行二次开发,笔者改过的仓库:Hacker-Linner/nanoserver | https://github.com/Hacker-Linner/nanoserver

服务器

编写 Dockerfile.dev

FROM golang:

构建本地开发 Image

docker build -f Dockerfile.dev -t scmj-server:dev .

编写 mysql.cnf

[client]wait_timeout = 28800quick
max_allowed_packet = 500M
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M

编写 docker-compose.mysql.yaml

version: 

一键启动 MySql 和 Adminer

docker-compose -f docker-compose.mysql.yaml up -d

登录 Adminer 管理界面

我们进入 http://localhost:8086,使用如下配置登录:

  • 系统:MySQL

  • 服务器:db

  • 用户名:root

  • 密码:123456

  • 数据库:scmjfc1ee814cdd898b7611cddb0a5b72844.png

c19d9e63dcc10a6f30f7a7c5a467bd63.png

加入 launch.json

方便 VSCode 调试

{
"version": "0.2.0",
"configurations": [
{
"name": "nanoserver",
"type": "go",
"request": "launch",
"mode": "remote",
"remotePath":"/workspace/app",
"port": 2345,
"program": "${workspaceFolder}",
"env": {
"GO111MODULE":"on"
},
"args": [],
"trace": "log",
"showLog": true
}
]
}

加入 .air.toml

# Config file for [Air](https://github.com/cosmtrek/air) in TOML format

编写 docker-compose.dev.yaml

"3.4"

使用 docker-compose 调试

docker-compose -f docker-compose.dev.yaml up scmj-debug

使用 docker-compose 开发

docker-compose -f docker-compose.dev.yaml up scmj

因为 nanoserver 使用了 xorm,它会自动的根据定义的 model 生成数据库表 schema

3e12bb8ee6857c4bee88a870e72265c2.png

XORM 同步数据库

重新查看 Adminer,发现在 scmj 数据库中,xorm 已经为我们生成了表。40539b2f020458469ea0fac494897c33.png

相关代码是:

....
func syncSchema() {
database.StoreEngine("InnoDB").Sync2(
new(model.Agent),
new(model.CardConsume),
new(model.Desk),
new(model.History),
new(model.Login),
new(model.Online),
new(model.Order),
new(model.Recharge),
new(model.Register),
new(model.ThirdAccount),
new(model.Trade),
new(model.User),
new(model.Uuid),
new(model.Club),
new(model.UserClub),
)
}
...

客户端

这里我们直接使用 nanoserver 作者提供的 apk

安装安卓模拟器

这里我推荐网易的 MuMu模拟器。

e18bab7e88d3ed646a4d8ee7135b08bd.png

安装 APK

mahjong.apk,已经放到笔者修改过的项目中。这里我们使用多开助手,开4个空来血战。

45ee73e59a98763d280e0f9ce6b62c01.png
01d9e1fd5eb1d3040464c2a0c54188f3.png

客户端登录

我们点击微信登录。

072004833b259a2d08ad7b9b6d2d85f1.png 60fde81d9bcc9a21b2743370d824c769.png

发现登录失败……

解决客户端登录失败问题

当然这问题,也好解决:

  1. 按作者所说那样,反编译 apk,找到 appConfig.luac,使用二进制编辑器改完服务器地址,然后重新打包。

04cd03099259fcca667fe136bcc07535.png
  1. 直接使用代理,如 Charles 进行请求地址转发。(本地调试服务器程序完全够了)

Charles 对客户端请求地址转发

使用 Map Remote 映射到你本机调试的地址就完全够了。

ca24d6ace14c0512fab7c21035de85d2.png
f7a56a83517fdee9f4f34edfbbda143c.png

加入 guest 测试渠道 konglaie1ba9cc0640955432857a48df10718b8.png

重新登录进入游戏e333abf147543bd938f62bbce0c8bac0.png

d5a44227f5b83fd25aed0e403dff21ae.png

完美,搞定。

测试并凑一局血战到底

创建房间

f8cbcba0271368122894969662906131.png

加入房间

f68ec1c20f38524ddfbd3ccd0f5bc17c.png

开始游戏

547d56f22621b3c6f9af855e3f643fb5.png

查看服务器日志031b96ffc585dd45c775727d610c988d.png

3c8c1328e7015e9e97b8b93b16a43c02.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值