一直想独立开发一款网络游戏,曾经尝试了各种语言,也学习了各种框架,但都是糊里糊涂,服务器端根本搞不清楚到底咋回事,更别提开发了。自从接触了go语言,2个月来,对网络的认识在整体上有了很大提升,明白了服务器的含义,只是一个TCP长连接,来处理游戏的各种逻辑。当然分布式系统还是不懂,感觉很难控制,看了几个分布式架构,但都是有一个接口负责把消息进行转发,感觉这样的话接口的压力很大,负责的任务也太多,后端各个服务器的均衡问题他也要处理,所以我也不喜欢这样的架构,在考虑到自己游戏的特性,决定写个单服服务器,也就是可以提供一个游戏服或者多个游戏服对应后端一个服务器,通过加开新服的方式来扩展。这种方式代码上更容易实现。
通过对go的学习,也理解了其他语言线程,资源竞争的含义。。在开发游戏的逻辑中,遇到各种问题,由于我还毫无游戏服务器开发经验,所以仅从我从这次开发中学到和总结出的一点常识吧和大家分享。。
大家都知道go是并发性语言,现在我才理解这句话的含义。我的游戏框架是挺简单的,服务器采用纯TCP长连接,有客户端连接就开一个go程,进行不停读,由于第一步解包要保证读取数据包的顺序,所以第一步解包也在读的这个go程内,当然也可以把读取的数据全装进一个chan,再开一个单独的go程处理,我没有这么做,我认为一个go程处理一个客户端的连接再加初步解码的工作并不多,非常轻松的就能应付。这个初步解码就是分开各个数据包,因为TCP长连接传输数据是流模式,是不能分开一个一个数据包的,我们要自己分开,这也是tcp长连接和其他连接方式的不同。数据包分开后,就是处理各个数据包