在这个什么都流行分布式、大并发的时代,不支持点多节点也太说不过去了。
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进行响应