本文作者:sodme 本文出处: http://blog.csdn.net/sodme
版权声明:本文可以不经作者同意任意转载,但转载时烦请保留文章开始前两行的版权、作者及出处信息。

提示:阅读本文前,请先读此文了解文章背景:http://data.gameres.com/message.asp?TopicID=27236

  让无数中国玩家为之瞩目的“魔兽世界”,随着一系列内测前期工作的逐步展开,正在一步步地走近中国玩家,但是,“魔兽”的服务器,却着实让我们为它捏了一把汗。

  造成一个网游服务器当机的原因有很多,但主要有以下两种:一,服务器在线人数达到上限,服务器处理效率严重迟缓,造成当机;二,由于外挂或其它游戏作弊工具导致的非正常数据包的出错,导致游戏服务器逻辑出现混乱,从而造成当机。在这里,我主要想说说后者如何尽可能地避免。

  要避免以上所说到的第二种情况,我们就应该遵循一个基本原则:在网游服务器的设计中,对于具有较强逻辑关系的处理单元,服务器端和客户端应该采用“互不信任原则”,即:服务器端即使收到了客户端的数据包,也并不是立刻就认为客户端已经达到了某种功能或者状态,客户端到达是否达到了某种功能或者状态,还必须依靠服务器端上记载的该客户端“以往状态”来判定,也就是说:服务器端的逻辑执行并不单纯地以“当前”的这一个客户端封包来进行,它还应该广泛参考当前封包的上下文环境,对执行的逻辑作出更进一步地判定,同时,在单个封包的处理上,服务器端应该广泛考虑当前客户端封包所需要的“前置”封包,如果没有收到该客户端应该发过来的“前置”封包,则当前的封包应该不进行处理或进行异常处理(如果想要性能高,则可以直接忽略该封包;如果想让服务器稳定,可以进行不同的异常处理)。

  之所以采用“互不信任”原则设计网游服务器,一个很重要的考虑是:防外挂。对于一个网络服务器(不仅仅是游戏服务器,泛指所有服务器)而言,它所面对的对象既有属于自己系统内的合法的网络客户端,也有不属于自己系统内的非法客户端访问。所以,我们在考虑服务器向外开放的接口时,就要同时考虑这两种情况:合法客户端访问时的逻辑走向以及非法客户端访问时的逻辑走向。举个简单的例子:一般情况下,玩家登录逻辑中,都是先向服务器发送用户名和密码,然后再向服务器发送进入某组服务器的数据包;但在非法客户端(如外挂)中,则这些客户端则完全有可能先发进入某组服务器的数据包。当然,这里仅仅是举个例子,也许并不妥当,但基本的意思我已经表达清楚了,即:你服务器端不要我客户端发什么你就信什么,你还得进行一系列的逻辑验证,以判定我当前执行的操作是不是合法的。以这个例子中,服务器端可以通过以下逻辑执行验证功能:只有当客户端的用户名和密码通过验证后,该客户端才会进入在线玩家列表中。而只有在线玩家列表中的成员,才可以在登陆服务器的引导下进入各分组服务器。

  总之,在从事网游服务器的设计过程中,要始终不移地坚持一个信念:我们的服务器,不仅仅有自己的游戏客户端在访问,还有其它很多他人写的游戏客户端在访问,所以,我们应该确保我们的服务器是足够强壮的,任它风吹雨打也不怕,更不会倒。如果在开发实践中,没有很好地领会这一点或者未能将这一思路贯穿进开发之中,那么,你设计出来的服务器将是无比脆弱的。

  当然,安全性和效率总是相互对立的。为了实现我们所说的“互不信任”原则,难免的,就会在游戏逻辑中加入很多的异常检测机制,但异常检测又是比较耗时的,这就需要我们在效率和安全性方面作个取舍,对于特别重要的逻辑,我们应该全面贯彻“互不信任”原则,一步扣一步,步步为营,不让游戏逻辑出现一点漏洞。而对于并非十分重要的场合,则完全可以采用“半信任”或者根本“不须信任”的原则进行设计,以尽可能地提高服务器效率。

  本文只是对自己长期从事游戏服务器设计以来的感受加以总结,也是对魔兽的服务器有感而发。欢迎有相同感受的朋友或从事相同工作的朋友一起讨论。

从“魔兽世界”的服务器崩溃说开去......相关推荐

  1. 吃鸡进游戏显示错误服务器繁忙,绝地求生游戏崩溃进不去怎么办 服务器炸了繁忙解决方法...

    绝地求生PC1.0版本,尤其是国服开启后,许多玩家遇到了游戏崩溃.进不去,以及服务器炸了.繁忙.登不上去等情况.作为一个大型吃鸡手游,绝地求生公测后诸多问题倒是不难理解,不过进不去登不上这些问题要怎么 ...

  2. wow怀旧服新开服务器最新消息,魔兽世界怀旧服什么时候开服_怀旧服最新消息一览...

    魔兽世界怀旧服8月27日就要正式开服了,今天NGA高玩总结的官方问答要点释疑,一起来看看吧. 服务器相关 如果开服当天还有大量没建号的玩家涌入导致服务器爆满,会马上加开新服. 玩家满级后,会视情况开放 ...

  3. 上古世纪服务器不稳定,《上古世纪》经典服火爆开服,玩家过多竟导致服务器崩溃!...

    当初<魔兽世界>上线之时,官方明显错估了玩家的热情,蜂拥而至的玩家,直接导致了服务器的雪崩,引发过不少玩家的吐槽.但吐槽归吐槽,游戏还是要玩的.这种情况正如现在的<上古世纪>. ...

  4. 魔兽世界 服务器维护,魔兽世界8.0:服务器崩溃紧急维护三小时 网易这次得背大锅!...

    原标题:魔兽世界8.0:服务器崩溃紧急维护三小时 网易这次得背大锅! 魔兽世界8.0版本在8月14日凌晨6点30分准时开启,不知道有多少玩家彻夜难眠,定了不知道多少闹钟,甚至不惜请假.辞职只为了在第一 ...

  5. 魔兽服务器联盟在线,《魔兽世界》怀旧服再开新服,部落联盟泾渭分明?

    原标题:<魔兽世界>怀旧服再开新服,部落联盟泾渭分明? 2月13号早间,<魔兽世界>经典怀旧服再次开放了两组全新的服务器--光芒与无畏,旨在缓解因为新内容上线而暴涨的在线人数. ...

  6. 魔兽世界服务器显示新,《魔兽世界》怀旧服再开新服,背后的原因竟然是!

    原标题:<魔兽世界>怀旧服再开新服,背后的原因竟然是! <魔兽世界>怀旧服宣布加开一组全新PVP服务器"维克托".到了2月13日,官方继儿又宣布开放了两组新 ...

  7. 灰烬使者服务器可以建立新账号吗,灰烬使者也成服务器了?《魔兽世界》怀旧服再开新服...

    原标题:灰烬使者也成服务器了?<魔兽世界>怀旧服再开新服 随着魔兽世界怀旧服的开启,预料中的登录潮随之而来,网易暴雪随之启动紧急预案,四组新服务器再次向玩家们开启.而为这些新服务器命名的, ...

  8. 怀旧服服务器队列位置波动,《魔兽世界》怀旧服刚开服就被挤爆 大量玩家疯狂涌入...

    原标题:<魔兽世界>怀旧服刚开服就被挤爆 大量玩家疯狂涌入 今日(8月27日)<魔兽世界>经典怀旧服正式开服.虽然暴雪增开了6组服务器,但在正式开服时,许多服务器挤满了人,服务 ...

  9. 网游类似魔兽世界的服务器维护都是在干嘛?

    问题:网游类似魔兽世界的服务器维护都是在干嘛? 也算是个困惑很久的问题了,今天等WOW开服一等就是一天,真是从白天到黑夜,所以很奇怪网游的服务器维护这么长的时间,究竟要做要哪些工作呢!? 回答者:林路 ...

最新文章

  1. 独家 | PyCaret 2.1横空出世-有什么新的内容?
  2. Handler消息机制(一):Linux的epoll机制
  3. 直播这把“火”,还能烧多久?
  4. python findall函数_python正则表达式之中的findall函数是什么?
  5. dataframe中多列除以不同列_Python之DataFrame切片与索引实验
  6. 全网最强的数据可视化秘诀:学会这个工具,数据分析不是事
  7. 数字int转换成文字string形式的方法
  8. Appium appium 安装不了
  9. clickhouse性能优化实践
  10. 微信小程序常用操作(获取openid,获取电话号码,模板消息)
  11. QQ空间自动发广告说说?可能是激活工具附带的独狼Rootkit!
  12. 线性代数 第二章 矩阵 知识点总结(Jeff自我感悟)
  13. IOS最新新浪微博开放平台Oauth2.0授权获取Access_Token
  14. 虚拟机usb服务器,VM虚拟机支持USB启动的方法
  15. 日常工作计划安排工具
  16. python登录脚本_python实现的登录和操作开心网脚本分享
  17. python邮件合并的基本操作步骤_邮件合并的基本操作步骤 - 卡饭网
  18. lua的坑(持续更新,每日更新两篇,9/15),更新到17个
  19. 窗口透明化 AlphaBlend
  20. Win10,详细永久关闭更新方法(附图文)

热门文章

  1. 首富软件测试工资,测试你成为富豪 测试你天生是什么命
  2. 【luogu P4036】【ybt金牌导航4-5-3】火星人
  3. jupyter lab指定exe文件添加、更改R kernel
  4. (深搜)蒜厂有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。(深搜)
  5. 抓包工具charles手机代理抓手机包教程
  6. 关于微信小程序开发中的显示个人信息以及重置密码功能
  7. 使用SQLMAP自动化探测SQL注入
  8. 2021年上海值得去的66家规模互联网大厂公司全名简称
  9. qml之Repeater
  10. WIN10桌面右击无法个性化,显示“该文件没有与之关联的应用来执行该操作,请安装应用,若已经安装应用,请在默认应用设置页面中创建关联”