zoukankan      html  css  js  c++  java
  • 游戏服务器菜鸟之C#初探一游戏服务

          本人80后程序猿一枚,原来搞过C++/Java/C#,因为工作原因最后选择一直从事C#开发,因为读书时候对游戏一直比较感兴趣,机缘巧合公司做一个手游的项目,我就开始游戏服务器的折腾之旅。

          游戏的构架是前端unity3d,服务端C#,数据库用SqlService。基础工作做完,就开始动工,因为前期考虑不周,所以暂定使用Http短链接进行,这也是导致后面服务器失败的根本原因之一,下面就说说前期最基础的构架:

          就是最基础的构架,但是接下来由于游戏的细化,一些列的问题就出现了:

          1.账号登陆的顶号问题如何处理,我们采用的每个用户登录之后生成sessionID,然后在客户端心跳包(轮训)请求服务器,匹配用户ID和SessionID的匹配进行用户时候重复登录;

          2.在游戏战斗过程中,会涉及服务器对客户进行广播数据,因为采用HTTP请求,所以就只有使用心跳包进行处理;

          3.服务器很多配置文件都采用cspbuf进行配置使用,因为担心每次加载数据过多,所以采用的依赖缓存进行加载和处理;

          貌似所以的问题都处理好了,接下来就是测试了,开始进行小数量的测试,游戏还可以勉强的运行,但是随后随着游戏玩家数量的增加,服务器慢慢的支撑不住,出现CUP和内存消耗过高,导致游戏经常卡段的情况,最后经过分析,导致的原因可能如下:

          1.客户端采用过多的轮训服务器,导致IIS压力过大,CUP和内存增加;

          2.配置缓存文件过多,导致服务器内存消耗;

          3.游戏过程中很多数据都直接读取数据库操作,导致了IO过多,所以CUP和内存消耗过大;

          4.传输过程中大部分数据使用正常的JSON数据没有进过压缩和处理,也导致传输通道消息资源的浪费;

          5.程序中的部分优化没有做到;

         反正等等原因导致了第一次游戏服务器的开发,出现各种问题,现在表面解决了问题,能够在小数量范围运行,但是数据大就出现问题,所以就开始考虑下一个版本的重构;

  • 相关阅读:
    Redis 之服务器集群配置
    Redis 之持久化(rdb、aof)
    Redis 之消息发布与订阅(publish、subscribe)
    Redis事物及锁的运用
    Redis 之hash集合结构及命令详解
    对Ul下的li标签执行点击事件——如何获取你所点击的标签
    .net 面试题(3)
    SQL Server 系统时间
    分布式内存对象缓存 memcached
    MVC 模板页和布局
  • 原文地址:https://www.cnblogs.com/kq123321/p/6072602.html
Copyright © 2011-2022 走看看