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#实现了一个《热血传奇》的服务器

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mysql数据类型tinyint_innodb buffer pool size

    mysql数据类型tinyint_innodb buffer pool size分享下mysql中TINYINT的取值范围,很基础的一些内容。在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127。无符号的范围是0到255(见官方《MySQL5.1参考手册》http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeric-types)。Tinyint占用1字节的存储空间,即8位(b…

  • SQL索引优缺点

    SQL索引优缺点前两篇文章我总结了一些SQL数据库索引的问题,这篇主要来分析下索引的优缼点,以及如何正确使用索引。索引的优点:这个显而易见,正确的索引会大大提高数据查询,对结果进行排序、分组的操作效率。索引的缺点:优点显而易见,同样缺点也是显而易见:1:创建索引需要额外的磁盘空间,索引最大一般为表大小的1.2倍左右。2:在表数据修改时,例如增加,删除,更新,都需要维护索引表,这是需要系统开销的

  • 如何在Python程序中运行Unix命令

    如何在Python程序中运行Unix命令Unix是由KenThompson和DennisRitchie在1969年左右在AT&T贝尔实验室开发的操作系统。我们可以使用许多有趣的Unix命令来执行不同的任务。问题是,我们可以直接在Python程序中使用此类命令吗?这就是我将在本教程中向您展示的内容。Unix命令ls列出目录中的所有文件。如果在Python脚本中按原样放置ls,则在运行程序时将得到以下内容:Tra…

  • laravel重定向到上一个页面怎么带参数返回 withsucess 成功提示信息

    laravel重定向到上一个页面怎么带参数返回 withsucess 成功提示信息

    2021年10月26日
  • java开发webservice的几种方式「建议收藏」

    java开发webservice的几种方式「建议收藏」webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录。1.Axis2方式Axis是apache下一个开源的webservice开发

  • adminlte ajax,AdminLTE

    adminlte ajax,AdminLTEReminder!AdminLTEusesallofBootstrap3components.It’sagoodstarttoreviewtheBootstrapdocumentationtogetanideaofthevariouscomponentsthatthisdocumentationdoesnotcover.Tip!Ifyoug…

发表回复

您的电子邮箱地址不会被公开。

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