Go_mqant框架


title: Go_mqant框架
categories: Go
tags: [go, 游戏服务器, 框架]
date: 2018-08-09 14:16:18
comments: false

Go_mqant框架

  • GitHub : https://github.com/liangdas/mqant
  • wiki: https://github.com/liangdas/mqant/wiki
  • 社区 : http://www.mqant.com

helloworld demo

参考: mqant的HelloWorld

编译后启动进程 (win)

单进程部署
> cd ${GOPATH}/bin
> start server.exe -pid=development -conf=../bin/conf/server.json -log=../bin/logs

参考: mqant启动

分部署部署

参考: mqant分布式部署启动和配置思路


自定义协议返回值

框架默认返回值为 (result string, err string)

可以修改为自定义值, 例如 (result []byte, err Int32) , 错误码自己定义

参考: mqant自定义封装规则


修改消息体为 protobuf

参考: 客户端与服务端通信可能使用protobuf协议,那么msg就是[]byte

返回值与性能, 如何省掉无效的编解码流程呢?


服务器主动给客户端发送消息

参考: 服务器主动给客户端发送消息


后端rpc自定义数据结构

参考: mqant中的RPC

后端模块间的rpc调用时, 记得要传 session 进去

// 注册消息
func (m *Chat) OnInit(app module.App, settings *conf.ModuleSettings) {
...
	m.GetServer().RegisterGO("TestRpc", m.testRpc) //后端rpc消息命名不受 HD_ 前缀约束, 可以随意命名
}
func (m *Chat) testRpc(session gate.Session, msg map[string]interface{}) (result map[string]string, err string) {
	ret := make(map[string]string)
	ret["aaa"] = "111"
	ret["bbb"] = "222"
	return ret, ""
}

//其他模块调用消息
func (m *HellWorld) say(session gate.Session, msg map[string]interface{}) (result string, err string) {
	testMsg := make(map[string]interface{})
	testMsg["hello"] = "world"
	ret01, err01 := m.RpcInvoke("Chat@Chat001", "TestRpc", session, testMsg) // session也要记得传

可优化定制

后端rpc

可以直接用 protobuf 把数据都转成打包成 []byte 进行rpc传输数据, 接收到数据时也用 protobuf解包数据即可, 接受时也用, 减少转换工具的 switch case 匹配转换类型

  • 发送数据 关键代码 rpc_client.go

    func (c *RPCClient) Call(_func string, params ...interface{}) (interface{}, string) {
        var ArgsType []string = make([]string, len(params))
        var args [][]byte = make([][]byte, len(params))
        var span log.TraceSpan = nil
        for k, param := range params {
            var err error = nil
            ArgsType[k], args[k], err = argsutil.ArgsTypeAnd2Bytes(c.app, param)
    
  • 接受数据 关键代码 rpc_server.go

    		if len(ArgsType) > 0 {
    			in = make([]reflect.Value, len(params))
    			for k, v := range ArgsType {
    				v, err := argsutil.Bytes2Args(s.app, v, params[k])
    
mqantmqant 是一款基于 Golang 语言的简洁,高效,高性能的分布式游戏服务器框架,研发的初衷是要实现一款能支持高并发,高性能,高实时性的游戏服务器框架,也希望 mqant 未来能够做即时通讯和物联网方面的应用。特性分模块机制基于 golang 协程,开发过程全程做到无 callback 回调,代码可读性更高RPC 支持本地和远程自动切换远程 RPC 默认使用 rabbitmq,未来可以添加更多种类的通信协议网关采用 MQTT 协议,无需再开发客户端底层库,直接套用已有的 MQTT 客户端代码库,可以支持IOS,Android,websocket,PC 等多平台通信现如今只有多进程的架构才能达到支撑较多在线用户,降低服务器压力,降低单点故障所带来的影响等要求,因此一个真正高可扩展的游戏运行架构必须是多进程的。然而在游戏的开发和运营也是按步骤阶段性进行的,尤其是现如今服务器硬件设备配置也越来越高的前提下,在游戏刚开始运营时单台服务器就足够支撑了,况且多进程部署所带来的运维成本也相对较高。mqant 的设计思想是在能用单台服务器时能让充分挖掘服务器的性能,而在需要多进程时再通过简单的配置就可以实现分布式部署。mqant 游戏服务器的运行架构mqant 服务器是按模块来划分功能模块的,例如 用户管理,在线聊天,战斗平台等等都应该划分为独立的模块模块之间通过 RPC 通讯,mqant 底层会根据实际情况选择 rpc 数据交互的通信渠道,在调用模块在同一个进程的情况下直接使用 golang chan 通讯,因此同进程内模块通信性能不受影响。 标签:mqant
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蝶泳奈何桥.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值