之前c++服务器,是端游转过手游来的,在我不断的优化下,成功从c++98到c++11,以及32位到64位的转变,从端游服务器,转到手游服务器,上线人数单服1W+没太大压力。
go是我业余的时候接触到的,在现在大环境下,高并发和跨平台是现在开发游戏服务器的主流,之前那套c++说实在是够用,只要能达到那个量,单服性能极致,我只服c++。
skynet+lua,c底层,lua逻辑,我也过来过c++底层,lua逻辑,但实际效果是lua并不是我想要去写的,可能我对lua脚本不感兴趣。go做的事情和skynet做的大同小异,都是携程,抢占式g调度模式,go 有个goroutine和channel,skynet lua虚拟机。
当时设计go的时候,由于跟c++大轮子有点出路,c++是循环轮子模式,单逻辑处理能力有目共睹,再设计go的时候我选择了actor模式,每个角色都相互独立,这点携程和信道立功了。全服中,没用到锁的地方不用锁,全服用到锁的地方就一两处,acotr模式立功了,每个角色有各自的消息队列,接受和处理信息。
大体主流网络模式是rpc,不过不是第三方的rpc,而是自己的rpc,不用protbuf那样定义消息体,只需要类型即可,通过refeclt go里面神奇的东西,用好事半功倍,在c++里面只能用宏来实现,或者用template,当然通信方面也支持protobuf客户端与服务器之间的传输。
[image.png](https://static.studygolang.com/180113/aad06eeec4c428b80ac82d46a4cff3af)
![}HM_B56RZRAU1](VQ$BQOCK.png](https://static.studygolang.com/180113/79ed7521b38914c838c02d31416462d7.png)
第 1 条附言 ·
https://github.com/bobohume/go-server
第 2 条附言 ·
go架设的服务器源码如下https://github.com/bobohume/go-server
hi,channel本身内部有锁。不过效率比较高点。本身gorotinue就是抢占模式,假如gorotinue异步驱动,在高并发的情况下。轮训到每个玩家就少了,我看了你的代码,你的比较像workman,生产者消费者。你的是io过来,放消息队列,然后各个模块去取消息队列。我现在是一个玩家一个actor,能轮训的机会大一点,在同步的时候可以考虑一个actor取推,比如地图,里面的objcet全部由map来推送。主要还是抢占模式。。。所以要考虑分布式。。。地图可以不支持内存同步(本身逻辑太依赖内存),但可以地图分布。账号服务器,游戏有些服发现,踢人等,不能分布也没事。做游戏可以考虑,多开几个服务器的方向,一个服务器1000,2个服务器就是2000,但是他们是分布式同一服务器
#8