go实现一个简单的游戏服务器框架(lotou)多节点

代码仓库

在这个什么都流行分布式、大并发的时代,不支持点多节点也太说不过去了。
lotou的多节功能主要是建立在network和core模块之上的。
主要分为slave和master。

在lotou的多节点中,有一个master和多个slave组成。

因为lotou里面主要是针对服务进行通信,所以只要master和slave的主要功能就是对服务间
的消息进行转发。
基于多节点网络,lotou还实现了基于服务的远程调用,同时支持同步和异步模式的远程调用(request和call)模式。

master

topology.StartMaster(“127.0.0.1”, “4000”)

启动master模块,负责监听slave节点和接受slave节点上的消息。

slave

topology.StartSlave(“127.0.0.1”, “4000”)

启动slave模块,负责和master建立连接,转发和接受跨节点消息。

core

core.RegisterNode()

向master注册该节点,阻塞coroutine直到注册成功,注册节点成功后,master会为该节点申请一个nodeID(注:对于多节点,所有的service都必须在RegisterNode返回之后再注册,否则该serveice无法作为全局service存在。)

core.Name(game.Id(), “game1”)

命名全局节点,该函数会对传入的名字进行检查,如果名字不是以.开头的,则为全局名字。
对于多节点的lotou,全局名字会发往master注册,且注册成功之后,同步到当前注册的所有的节点上。

core.GetIdByName(“service4”)

获取指定名字的serviceid,如果是全局名字且本地没有缓存,则继续从master节点获取

core.Send

像指定节点发送消息,如果该节点不是本地节点,则通过slave-master服务进行转发,发送到service对应的节点。

core.Request

像指定服务发送一个request,当服务响应之后,callback会被执行,该函数不阻塞当前coroutine。

core.Call

服务间调用,通过core.Call可以像其他服务发起远程调用,该函数阻塞当前coroutine,直到被响应为止。
目前一个service同一时刻只能发起一个远程调用。

core.Respond

该函数用于收到request的service对远程service进行响应

core.Ret

该函数用于收到call的service对远程service进行响应

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值