go高性能游戏服务器框架

网友投稿 944 2022-10-23

go高性能游戏服务器框架

go高性能游戏服务器框架

rhino

go网络基础框架

使用领域

rhino励志打造一个可靠的游戏服务器框架,其核心内容在于

· actor 主要使用在应用层的逻辑部分(actor内部是单线程)例如:日志服务,db服务,游戏服务,网关等等

· network 用于tcp,http,udp的通信,封装读写包

· 其他部分是封装了一些重复劳动的工具

· rpc模块,目前还没有,以后会加入,考虑一个高可用的方案

actor模型

1 核心api在actor中,其主要actor处理逻辑部分在于process

2 process包括邮件(channel)和远程(retome)他们都提供对actor的支持

3 所以一切皆actor

network

net.Conn有个问题需要说下,就是SetReadDeadline/SetWriteDeadline这两个是读写超时的绝对时间

设置读写会超时,那么就需要处理read和write返回值n,查看源码发现net.Conn中write其实是一个write full,所以一般情况不需要设置SetWriteDeadline。

network.stream使用len+body的读取方法,一般处理read/write在单线程比较安全可靠,借助actor模型 由上级actor对其write,来更好的解决和应对分布式中环路堵塞和超时的问题

编写一个简单的服务器

func main(){ network.StartTcpServer(":8088", network.OptionHandler(func(conn net.Conn) (err error) { Stage().ActorOf(WithRemoteStream(func(ctx ActorContext) { switch body := ctx.Any().(type) { case *Started: fmt.Println("connect addr:", conn.RemoteAddr().String()) case *Stopped: case []byte: fmt.Println("message: ", network.ReadBegin(body)) ctx.Send(ctx.Self(), network.WriteBegin(0x102).Flush()) case error: //设置了心跳会被通知 default: fmt.Printf("untreated type %T \n", body) } }, conn)) return })) cli := Stage().ActorOf(WithRemoteAddr(func(ctx ActorContext) { switch body := ctx.Any().(type) { case *Started: fmt.Println("open ok") case *Stopped: case []byte: fmt.Println("cli respond: ", network.ReadBegin(body)) case Failure: //最终错误退出的原因 default: fmt.Printf("other object miss handle %T \n", body) } }, "localhost:8088")) psend := network.WriteBegin(0x101, "who's your daddy!") cli.Tell(psend.Flush())}

(QQ技术群:75205017)

欢迎服务器开发者和爱好者入群交流!阿里,百度,腾讯大牛在线分享经验。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:micro-job- 分布式任务调度框架
下一篇:缓存系列:缓存一致性问题的解决思路
相关文章

 发表评论

暂时没有评论,来抢沙发吧~