zoukankan      html  css  js  c++  java
  • 游戏服务器架构

    一些拓扑:

    https://blog.csdn.net/to_be_better/article/details/56954500

    登录服务器


     https://github.com/cloudwu/skynet/wiki/LoginServer

    https://github.com/cloudwu/skynet/wiki/MsgServer

    只是负责验证用户名和密码,验证之后返回token,token是有有效时间的,在有效时间内,并没有保持连接的必要,所以,这里的RequestResponse可以做成短连接(http请求响应模式),提升并发。


    如果超过了有效时间还没有进入游戏,令牌失效,在登录验证时将被踢回重新获取令牌。


    登录服务器和网关之间需要有一个固定的连接传递新生成的令牌。

    中心服务器


    管理各种服务器
    --------------------------
    登记各种服务器
    广播各种服务器上线、下线
    反映各服务器状态

    记录最大在线人数
    --------------------------
    记录各个服务器的在线(人数连接数)

    连接服务器(gateway)


     处理多连接的服务器


    网关服务器


    负责所有客户端的长连接的维护。每一个连接都会对应一个session,只有通过登录验证的session才能将报文传入游戏服务器群的消息队列中。没验证登录的session需要发送之前从登录服务器获得的token来验证登录。

    token会和账号绑定,一旦验证通过,网关将通知游戏服务器新玩家进入,游戏服务器从数据库读取玩家的角色列表数据,再通过网关发送给客户端。

    上述的操作可能是游戏中最耗时的一步。所以可能增加的策略是异步推送,多人排队等。

    也能做这些用途:

    客户端发客户端
    转发给各服务器
    消息连接用的

    作用不仅仅是转发了,同时也起到隔绝网络的作用(反射代理)。 

    组播


     https://blog.codingnow.com/2007/03/multicast.html

    Profile


    https://github.com/cloudwu/skynet/wiki/Profile

    处理 TCP 的分包

    在开发网络游戏时,我们往往需要按传统,把 TCP 连接上的数据流分割为一个个数据包。将数据流转换为数据包,比较常见的做法是给数据包加一个长度信息,组装在数据流中。

    游戏服务器


    玩家确实进入游戏之后,每一个玩家都会有一个对应的Agent来维护。包括玩家的即时游戏数据,存档游戏数据。所有与游戏内容相关的都称为游戏服务器。这部分的工作量将是游戏开发过程中最大的。


    主要就是从网关发送的消息队列中不断读取消息,然后进行处理。对于游戏来说,整个世界是在一个循环体中的,所以首先肯定会有一个大的世界循环体,然后是每个Agent的存在更新。鉴于现在的网游都没有存档的设计,全是数据统一入库的,所以,Agent还需要负责玩家数据的持久化。我只打算做定期持久化,如果像王者那样即时持久化,需要的代码量和代码的耦合让人不太舒服。




    需要的类库
    服务器内部的通讯,消息队列,因为没有什么需要持久化稳定之类的需求,速度可以提上来,ZeroMQ是极好的。
    数据库还是继续使用MySQL

     http://blog.51cto.com/rangercyh/1673922

    https://zhuanlan.zhihu.com/p/26252412

  • 相关阅读:
    思源:秒级体验百亿级数据量监控钻取
    禧云Redis跨机房双向同步实践
    谈谈数据中台技术体系
    RCA:收单设备调用云端接口频繁超时排查总结
    技术上的“深淘滩,低作堰”
    企业私有源代码上传github致入侵之大疆案判决了
    那些年我们一起犯过的错
    异地双活的四个误区
    没有预见性你凭什么晋升
    中国IT史上两大严重事故对我们的警醒及预防措施
  • 原文地址:https://www.cnblogs.com/losophy/p/9267719.html
Copyright © 2011-2022 走看看