登录服的设计 -- 功能需求

原创 2007年09月15日 10:34:00

  正如我们在前面曾讨论过的,登录服要实现的功能相当简单,就是帐号验证。为了便于描述,我们暂不引入那些讨论过的优化手段,先以最简单的方式实现,另外也将基本以mangos的代码作为参考来进行描述。

  想象一下帐号验证的实现方法,最容易的那就是把用户输入的明文用帐号和密码直接发给登录服,服务器根据帐号从数据库中取出密码,与用户输入的密码相比较。

  这个方法存在的安全隐患实在太大,明文的密码传输太容易被截获了。那我们试着在传输之前先加一下密,为了服务器能进行密码比较,我们应该采用一个可逆的加密算法,在服务器端把这个加密后的字串还原为原始的明文密码,然后与数据库密码进行比较。既然是一个可逆的过程,那外挂制作者总有办法知道我们的加密过程,所以,这个方法仍不够安全。

  哦,如果我们只是希望密码不可能被还原出来,那还不容易吗,使用一个不可逆的散列算法就行了。用户在登录时发送给服务器的是明文的帐号和经散列后的不可逆密码串,服务器取出密码后也用同样的算法进行散列后再进行比较。比如,我们就用使用最广泛的md5算法吧。噢,不要管那个王小云的什么论文,如果我真有那么好的运气,早中500w了,还用在这考虑该死的服务器设计吗?

  似乎是一个很完美的方案,外挂制作者再也偷不到我们的密码了。慢着,外挂偷密码的目的是什么?是为了能用我们的帐号进游戏!如果我们总是用一种固定的算法来对密码做散列,那外挂只需要记住这个散列后的字串就行了,用这个做密码就可以成功登录。

  嗯,这个问题好解决,我们不要用固定的算法进行散列就是了。只是,问题在于服务器与客户端采用的散列算法得出的字串必须是相同的,或者是可验证其是否匹配的。很幸运的是,伟大的数学字们早就为我们准备好了很多优秀的这类算法,而且经理论和实践都证明他们也确实是足够安全的。

  这其中之一是一个叫做SRP的算法,全称叫做Secure Remote Password,即安全远程密码。wow使用的是第6版,也就是SRP6算法。有关其中的数学证明,如果有人能向我解释清楚,并能让我真正弄明白的话,我将非常感激。不过其代码实现步骤倒是并不复杂,mangos中的代码也还算清晰,我们也不再赘述。

  登录服除了帐号验证外还得提供另一项功能,就是在玩家的帐号验证成功后返回给他一个服务器列表让他去选择。这个列表的状态要定时刷新,可能有新的游戏世界开放了,也可能有些游戏世界非常不幸地停止运转了,这些状态的变化都要尽可能及时地让玩家知道。不管发生了什么事,用户都有权利知道,特别是对于付过费的用户来说,我们不该藏着掖着,不是吗?

  这个游戏世界列表的功能将由大区服来提供,具体的结构我们在之前也描述过,这里暂不做讨论。登录服将从大区服上获取到的游戏世界列表发给已验证通过的客户端即可。好了,登录服要实现的功能就这些,很简单,是吧。

  确实是太简单了,不过简单的结构正好更适合我们来看一看游戏服务器内部的模块结构,以及一些服务器共有组件的实现方法。这就留作下一篇吧。 

登录服的设计(1) -- 功能需求

正如我们在前面曾讨论过的,登录服要实现的功能相当简单,就是帐号验证。为了便于描述,我们暂不引入那些讨论过的优化手段,先以最简单的方式实现,另外也将基本以mangos的代码作为参考来进行描述。 ...
  • limiko
  • limiko
  • 2011年10月09日 12:38
  • 482

Mangos源码分析(6):登录服的设计之功能需求

正如我们在前面曾讨论过的,登录服要实现的功能相当简单,就是帐号验证。为了便于描述,我们暂不引入那些讨论过的优化手段,先以最简单的方式实现,另外也将基本以mangos的代码作为参考来进行描述。  想象一...
  • u011686361
  • u011686361
  • 2015年09月10日 12:01
  • 376

为什么需要功能需求设计说明书

为什么需要功能需求设计说明书在没有功能设计文档时,主要有如下几个问题: 前期研究团队沟通成本如何要让团队里面的所有人员对软件产品的功能需求设计有一个共识?没有功能设计文档,反正我是想不出有什么办法。当...
  • Nick_php
  • Nick_php
  • 2017年04月11日 12:01
  • 490

软件设计——质量属性(非功能性需求)

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • u012760183
  • u012760183
  • 2016年06月13日 20:40
  • 2247

游戏服务端为什么需要登录服?!

注:这篇文章不仅会说登录服,还会说一些其它游戏相关的事哦! 我们都知道,很多游戏在上线时,都会大肆宣传,最近宣传比较多的就是《激战2》了。(当然我不是《激战2》的水军)很多玩家都会提前坐在电脑前,等候...
  • a374826954
  • a374826954
  • 2014年05月31日 00:03
  • 2484

全球同服架构设计

作者:马剑飞 链接:https://www.zhihu.com/question/31103751/answer/64631116 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 刚好做过几...
  • LANGZI7758521
  • LANGZI7758521
  • 2016年09月29日 17:53
  • 1139

学习软件设计的非功能性需求

非功能需求是产品必须具备的品质或者它将事情做到了多好,它们可以让产品有吸引力、易于使用、快速、可靠或者安全。通常并不改变产品的功能,功能性需求是让产品工作的需求,非功能需求是为工作赋予特征的需求。所以...
  • adermxl
  • adermxl
  • 2014年03月20日 22:54
  • 1885

非功能需求的重要性

  好的架构设计应该具有以下几点:        1.良好的模块化.每个模块职责明晰,模块之间的送耦合,模块内部高聚合并合理地实现信息隐藏.        2 .适应功能需求的变化,适应技术的变化.应...
  • wzhh598
  • wzhh598
  • 2007年06月18日 22:21
  • 1155

【软件开发】:非功能需求与功能需求

需求定义:需求(requirement)就是系统(更广义的说法是项目)必须提供的能力和必须遵从的条件。需求分类:(1) 在一般使用中,需求按照功能性(行为的)和非功能性(其它所有的行为)来分类。  功...
  • qq_23100787
  • qq_23100787
  • 2015年11月20日 10:36
  • 1053

JAVA语法基础之流程控制

在进行程序设计的时候,我们会经常进行逻辑判断,根据不同的结果做不同的事,或者重复做某件事,我们对类似这样的工作称为流程控制。在Java中,流程控制分为两大类:选择和循环。下面就依次来介绍这两类。 一、...
  • jianggujin
  • jianggujin
  • 2015年12月05日 14:28
  • 2006
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:登录服的设计 -- 功能需求
举报原因:
原因补充:

(最多只允许输入30个字)