闲聊go开源微服务框架pitaya(1)
闲聊go开源微服务框架pitaya(1)
go极少有经典的框架,关于pitaya,摘自网上的一段话:
“基于golang,可伸缩的分布式游戏服务器框架
使用的技术比较先进 ETCD实现服务发现 NATS GRPC实现rpc可以docker部署, 国外公司TFG Co 开源项目.
地址:https://github.com/topfreegames/pitaya
Zooba(动物王者) appstroe排行很高的moba、吃鸡类游戏”
特别适用于房间类游戏,也可以用于多人社交游戏,比如有自己的房间,别人可以访问自己的房间,自己可以布置房间,有公共的广场一起玩,走元宇宙的思路.适合快速接入新框架,快速推进项目.本身开源框架肯定有些缺点,不过可以不断迭代优化.
关于消息转发,NATS 与GRPC二选一,框架默认使用nats消息队列.
Etcd,nats均可默认拉起即可.
网络通信支持tcp和websocket.
Pitaya的核心配置在config文件夹下的config.go文件里面.
消息处理主要在service文件夹的handler.go文件里面,包括握手,心跳,具体消息处理.具体消息又分为本地消息和远程需要被转发的消息.
消息转发依据route字符串: “服务器类型.组件名.函数名”,使用底层封装的app.rpc转发该类型所有服务器或者app.rpcto发送指定服.
App.rpcto 需要传入Route字符串加serverid
App.rpc 需要传入Route字符串即可
服务器类型分前端服务器和后端服务器,在例子中可以看到main函数中设置:
isFrontend := flag.Bool("frontend", true, "if server is frontend")
即可设置该进程为前端服务器,负责是接收玩家消息转发到后端服务器,也可以加入本地处理消息函数,比如登录验证.
下面这行代码即可设置为后端服务器:
isFrontend := flag.Bool("frontend", false, "if server is frontend")
后端服务器负责主要的游戏逻辑.
关于底层消息发送是使用自定义消息id还是使用route字符串,都可以,pitaya底层的消息id是原样返回的,如果使用框架的前端库会发现pitaya底层消息id是依次加1,发送到服务器的,如果前端不发route,可以将该id替换成自定义消息id,前端服务器收到该id后,再做底层映射.如果不使用消息id,使用route字符串做消息底层设计,好处是不用做id到route的映射,动态加入后端服或者更新后端服加入新消息,不用重启gate服,不影响现有服的运行,可动态加入.
真实收发的消息结构,是被封装了一层的:
type Message struct {
Type Type // message type
ID uint // unique id, zero while notify mode
Route string // route for locating service
Data []byte // payload
compressed bool // is message compressed
Err bool // is an error message
}
上面data是整个消息,ID是框架底层的自增消息id,compressed设置成true即可压缩消息,减少带宽.type有四种类型:
Request: "Request",
Notify: "Notify",
Response: "Response",
Push: "Push",
Request和notify是前端通知服务器的消息类型,服务器回复的response或push推送消息.
心跳机制,pitaya底层是服务器负责主动发送玩家,对于玩家掉线处理非常及时,也可以改为玩家主动发送心跳到服务器,关闭服务器的心跳主动推送那块,然后只负责定时检测玩家心跳是否超时,不断重置timer时间即可.
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgekibe
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01