go实现一个简单的游戏服务器框架(lotou)基本设计

代码仓库,目前代码比较粗糙,欢迎各种改进建议。
因为go语言原生支持高并发(goroutine)和通信机制(channel),所以首先想到的就是使用这两个东西来构建我的消息分发机制。
核心思路:

  • 有一个core模块维护了所有的服务
  • 当有消息发送的时候,通过该core模块将消息发送到对应服务器的接收channel中
  • 服务中开一个goroutine来从channel取出消息并处理

主要函数:

  • core.RegisterService(s) 注册一个服务到core,并且返回服务的id
  • core.Name(id, name) 给一个已经注册的服务取名字,以.开头的名字表示本地名字,其他的表示全局名字,如果是多节点的时候,可以被注册到master上。
  • core.SendName(dstServiceName, srcid, param …interface{})
  • core.Send(dstid, srcid, param …interface{}) 发送消息到指定服务,可以通过id或者名字来发送
  • core.Close(dstid, srcid) 发送关闭消息给服务,同时将服务从core模块中移除。
    目前只支持一个服务的消息只在一个goroutine中处理,且也只在这个goroutinue发送该服务的消息,如果在多个goroutinue处理,core模块中实现的service基本功能部分可能会有竞争风险,处理如下:
    OUTER_FOR:
        for {
            msg, ok := <-m.In()
            if !ok {
                log.Info("m.In is closed.")
                a <- 1
                break OUTER_FOR
            }
            m.DispatchM(msg)
        }

其中m就是一个service,DispatchM函数是在core模块内部实现的,这个函数会把消息分发到注册dispatcher的对应方法中,一般dispatcher就是就是service自身。

core模块基本功能使用完整用例可以参考https://github.com/sydnash/lotou/blob/master/core/core_test.go

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值