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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UML——对象图「建议收藏」

    UML——对象图「建议收藏」UML——对象图

    2022年4月24日
    40
  • 安全帽识别系统-智慧工地的守护者

    安全帽识别系统-智慧工地的守护者安全帽识别系统能够实时对未佩戴安全帽的行为发出警告,及时提醒监理人员处理,为作业人员筑起一道人工智能的安全防火墙。鹰眸安全帽识别系统面世之后,在业界引起了不小的震动,相关企业不但积极推广,还提出了许多建设性的意见,毕竟将人工智能的深度学习应用于视频分析还是很新的事物,那么鹰眸安全帽识别系统能做什么,在此与大家一起分享,希望起到抛砖引玉的作用。一、鹰眸安全帽识别系统通过视频实时分析工作区域,如…

    2022年5月15日
    40
  • mysql之模糊查询的方法

    mysql之模糊查询的方法想起Mysql模糊查询正常情况下我们想到的一般都是like,但是使用like,格式正确了效率很快,当然这是在数据量比较小的情况下,问题是在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时mysql查询的效率是很关键的,也是很重要的。一、一般情况下like模糊查询的写法:这个SQL语句,如果用explain解释的话,我们很容易就能发觉它是没有走索引搜索,而是对…

    2022年5月30日
    51
  • EXTJS详细教程

    EXTJS详细教程布局和容器普通布局Ext.create(‘Ext.panel.Panel’,{renderTo:Ext.getBody(),width:400,height:300,title:’ContainerPanel’,items:[{xtype:’panel’,title:’ChildPanel1′,height:100,width:’75%’},{

    2022年6月18日
    33
  • win10下nessus家庭版安装和简单使用「建议收藏」

    win10下nessus家庭版安装和简单使用「建议收藏」1.访问nessue官网下载:https://www.tenable.com/downloads/nessus?loginAttempted=true2.没有找到windows64位,这里下载了windows服务器版64位的3.双击下载的安装包进行安装,一直Next即可4.浏览器访问:http://localhost:8834即可打开Nessus(用谷歌可以直译成中文),如打开浏览器报错选择高级\进阶继续访问就行,点击‘ConnectviaSSL’5.

    2022年10月8日
    2
  • PHP实现删除数组中的特定元素

    PHP实现删除数组中的特定元素PHP实现删除数组中的特定元素

    2022年4月24日
    36

发表回复

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

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