WebGame开发总结

WebGame开发总结项目基本情况:  服务器端采用c++和c#混合开发,网络层采用c++开发,业务逻辑用c#开发。客户端采用silverlight。数据库采用mysql。GM工具用Asp.net,GM工具盒服务器通讯用wcf,基本把微软的东西都用遍了。  服务器端在开始的时候,使用了某位同事之前开发的一款服务器端引擎,改引擎曾经开源但现在基本不再更新。引擎地址:http://mmorpg.codeplex.com/  这款引擎在使用上只满足了部分需求,再加上原作者又跳槽,引擎基本是我在维护和改进,不过基本上都往里面

大家好,又见面了,我是你们的朋友全栈君。

不知不觉我们的项目开发有2年了,这两年来走了很多弯路,也收获了很多,今天在这里做一个总结。

项目基本情况:

  服务器端采用c++和c#混合开发,网络层采用c++开发,业务逻辑用c#开发。客户端采用silverlight。数据库采用mysql。GM工具用Asp.net,GM工具盒服务器通讯用wcf,基本把微软的东西都用遍了。

  服务器端在开始的时候,使用了某位同事之前开发的一款服务器端引擎,改引擎曾经开源但现在基本不再更新。引擎地址:http://mmorpg.codeplex.com/

  这款引擎在使用上只满足了部分需求,再加上原作者又跳槽,引擎基本是我在维护和改进,不过基本上都往里面加东西,改动地方不多(主要是修改小bug)。引擎的网络层采用C++开发,原先的代码有些问题,后来公司同事用c++重写了个网络层,效率上还不错,测试下来每秒能发送30w+个数据包。如果有同学想用上面说的引擎,需要自己对网络层进行改造。引擎除了网络层外,其它的部分都还ok,可以放心使用。

  客户端用silverlight是整个项目的一个大败笔,因为,微软现在已经放弃它了。虽然sl在配合我们的服务器开发很方便,但玩家和运营商的接受度还是比较低,所以,你懂的。

 研发总结:

  1.账户和玩家id,要在所有服务器里全局唯一。这点,之前在看一些其他网友的总结里有说过,但是当时真的没认为有多重要,直接用数据库的自增也可以。等游戏真正上线后才发现,这对游戏后面的运营,合服都产生了重大影响。最直接的影响,就是每次合服都需要重置玩家的id。合服需要修改的和账号id关联地方就数不清了,所以,在这里还是要和各位强调,账户的唯一id对游戏运营非常重要。

  2.游戏逻辑的脚本化或者动态更新能力。如果游戏做不到脚本化,那么,至少要利用.net的特性,实现dll的动态加载和更新。运营时不停服更新是很重要的功能,因为每次意外停服都有可能会造成5%的玩家流失。而在运营中碰上的bug,基本上是代码的逻辑错误或者数据配置错误,有动态更新功能,就能不停服更新服务器,修正这个bug。真正的因为底层崩溃的bug导致游戏崩溃的,基本没发生过(底层代码还是很稳定的^_^)。

  3.游戏死锁状态下脱离死锁的功能。虽然我们只是在偶然几次特殊情况下碰上,但是如果当时有脱离死锁功能(把当前任务强制结束,继续执行后面的任务),我们就不用重启服务器了。

  4.给策划的数据配置文件,要二维表结构,不要多维表结构。虽然xml可以表示多维表和树形关系,反序列化后可以给程序直接使用。但是,结构层次一多,策划在通过excel转xml时就容易发生问题,同时也不利于策划配置数据。所以,在定义配置文件时二维表比多维表要好。

  5.数据记录不可或缺。日志不仅仅指错误日志,还包含游戏里业务逻辑产生的数据。游戏逻辑需要记录的数据由策划定。作为程序我们也记录一些数据,特别需要关注的是每个任务执行的耗时,这个对今后的性能优化很有帮助。(注意,性能优化不仅仅只是用性能测试工具来看看那个函数耗时那么简单。因为只有真正上线后,玩家玩游戏时才能找到真正热点任务。)

  6.一定要挡住策划设计的带复杂玩法的系统。数据结构越复杂,规则越多,业务逻辑就容易混乱,混乱了,bug就产生了。所以,简化玩法对程序和玩家也有好处。

  7.敏捷开发。敏捷开发里的规则就算不能全用,下面的几点最好还是要有:单元测试,每日构建,以周为单位的迭代开发,故事(任务)墙。

运营总结:

  1.服务器的环境依赖尽可能少。在一台空白的windows2003上,我们配置服务器之前,需要上传200M左右的软件并进行安装,导致重新配置一台新服务器的时间不少于3小时,时间浪费严重。

  2.游戏的配置项要尽可能的少。这个配置是指数据库,ip,端口等,每个服务器都会不一样的配置。因为配置项分散在多个文件,导致文件安装到位后,还需要仔细的修改和检查这些文件,也浪费了不必要的时间。

  3.合适自己的服务器更新方法。一开始我们用远程登录到服务器,然后执行更新批处理的方法进行更新。但当服务器变多(>8台)时,这个流程就会变慢,也容易出错。最后用ssh执行脚本的方法对服务器进行批量更新。

  4.服务器的监控工具。监控的目的是防患于未然,例如,硬盘不足,cpu和内存异常变高,这个都是出故障的前兆。我们的游戏运行时会产生大量的日志,常常会因为配置关系,没有及时处理这些日志数据从而导致日志被撑满硬盘,游戏被迫停服。大家不要以为现在硬盘很便宜,2T的硬盘还不到600块,但是运营商给的硬盘通常是73G或者140G。

 

最后

  用.net技术开发游戏服务器的项目还是很少,虽然偶尔有几个公司用,但是和c++以及java还是没法比。中间原因很多,就不能细说。这里公布几个群,欢迎大家入群交流:

  C#游戏服务器交流  136485198  –群里面有有一个c#的网络引擎的高手

  C#游戏开发     223604735

  C#游戏服务器交流  279489850  –群主用c#实现了一个《热血传奇》的服务器

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133737.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • a javascript error occurred in_in from of是什么意思

    a javascript error occurred in_in from of是什么意思ERRORinapp.bundle.jsfromUglifyJs问题ERRORinapp.bundle.jsfromUglifyJsUnexpectedtoken:name«element»,expected:punc«;»[app.bundle.js:106,8]在用webpack对代码打包的时候报错,在网上找到了类似的答案,还是没有解决我的问题.能解…

    2025年11月27日
    3
  • [算法]-最短路径算法总结「建议收藏」

    [算法]-最短路径算法总结「建议收藏」Dijkstra最短路径算法按路径长度的递增次序,逐步产生最短路径的贪心算法基本思想:首先求出长度最短的一条最短路径,再参照它求出长度次短的一条最短路径,依次类推,直到从顶点v到其它各顶点的最短路径全部求出为止。时间复杂度为O(n2)算法流程:首先选定源点1,建立邻接矩阵C[5][5],初始化三个数组分别为D[n],P[n],S[n],分别用来存储从源点到对应点的最短距离和最短路…

    2022年5月26日
    41
  • 深入浅出Python——Python基础语法全解

    深入浅出Python——Python基础语法全解前言:Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。文章目录一、Python简介1.了解Python2.Python介绍3.Python特点4.Python发展历史5.Python版本二、Python解释器1.解释器的作用2.解释器的安装三、PyCharm安装与使用1.PyCharm的作用2.PyCharm安装与使用四、注释1.注释的作用2.注释的分类及语法五、变量1.变量的作用2.定义变量2.1标识符2.2命名习惯2.3使用变量2.4认识

    2022年6月24日
    22
  • mediumtext_MySQL中tinytext、text、mediumtext和longtext等各个类型详解【图】

    mediumtext_MySQL中tinytext、text、mediumtext和longtext等各个类型详解【图】MySQL中tinytext、text、mediumtext和longtext等各个类型详解【图】07-29栏目:技术TAG:mediumtextmediumtext一、字符串类型www.jhua.org类型www.jhua.org范围https://www.jhua.org说明www.jhua.orgChar(N)[binary]N=1~255个字节jhua.orgbinary:分…

    2022年5月2日
    42
  • SpringBoot框架总结

    SpringBoot框架总结SpringBoot框架总结一、SpringBoot框架的概念1、传统框架的弊端例如传统的SSM框架整合了MyBatis、Spring、SpringMVC框架,但其需要繁琐且重复的配置使程序员很是痛苦2、SpringBoot框架SpringBoot框架在传统框架的基础上对其进一步封装,只需要一些简单的配置,省去了传统框架繁琐的配置,解放了程序员,使程序员只需要关注业务而无需将经历花费在框架的配置上,大幅提高了编程的效率二、SpringBoot框架的创建1、idea创建SpringBoot工程

    2022年8月21日
    25
  • java string转integer(字符串转int java)

    publicclassexperiment{publicstaticvoidmain(String[]Zing){ Stringstr=”11212″; intb=Integer.valueOf(str).intValue(); System.out.println(b);}}

    2022年4月15日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号