一步一步开发Game服务器(二)登陆2

上一篇著作,讲解了简便的登陆意况。接下来我们继承助教登陆模块。

Bug管理是指对开发,测试,设计等进程中一层层活动过程中出现的bug问题予以纪录、审查、跟踪、分配、修改、验证、关闭、整理、分析、汇总以及去除等一雨后春笋活动状态的管理。,最后出相应图表总结,email通告修改者等成效。

在健康的游玩服务器情形下。在尚未登录前可以查看服务器大区情形,登陆后也可以查阅服务器大区情状,然后采用大区服务器。举办登录操作。

软件中的Bug是软件开发过程中的”副产品”。平常,Bug会促成软件出品在某种程度上无法满意用户的需要。每一个软件协会都精晓必须妥善处理软件中的Bug。这是涉嫌到软件社团生存、发展的成色根本。可遗憾的是,并非所有的软件社团都精通什么样有效地管理自己软件中的Bug

这般的气象就需要大家有一个签到服务器来承担,近日大区服务器的图景,是正规。拥挤,爆满。依旧停服维护。那么如此登录服务器,假如举行控制和出口呢?

BUG管理的含义

哪些与大区服务器常规开展通信已经同步登录状态吧?

bug能够唤起软件运行时发出的一种不期待或不足接受的表面表现结果,软件测试过程大概说就是环绕缺陷举行的,对bug的跟踪管理一般而言需要达到以下的对象:

登录服务器,可以看作是大家其他大区服务器的网关服务器。那么一定为了保证服务器的高可用性,已经内存等资源消耗。大家这边的数据交流肯定无法依靠于socket连接进行。这样消耗会很大,这里实在只需要查阅服务器状态和登陆即可。那么我们需要http就能顺利完成的办事。无需长连接,就无需考虑连接意况。

保险每个被察觉的bug都能够被解决;

那么这种情形,http固然能减小消耗,重回服务器状态。可是也要保管玩家的登陆状态,还要与另外服务器保持同步状态。那么依照IIS或者tomcat肯定是无力回天做到了。

此地解决的情致不必然是被修正,也恐怕是任何处理形式(例如,在下一个本子中更正或是不修正),总而言之,对各类被察觉的BUG的处理格局必须可以在支付团队中达到同等;

此处就有了自定义开发的依照Socket
的服务器程序来明日http协议监听。具体的稿子在此以前有过介绍(详见)。

收集bug数据并依据bug趋势曲线识别测试过程的等级;决定测试过程是否终止有很多种主意,通过bug趋势曲线来规定测试过程是否截止是常用并且较为有效的一种艺术;

前几日大家就来实在成功http登陆模块。

收集bug数据并在其上进行多少解析,作为集体的进程财富。在一个运行优良的社团中,bug数据的收集和剖析是很重点的,从bug数据中可以赢得许多与软件质地相关的多少。

1  Sz.Network.SocketPool.ListenersBox.GetInstance.SetParams(new MessagePool(), typeof(MarshalEndian));
2             Sz.Network.SocketPool.ListenersBox.GetInstance.Start("tcp:*:9527", "http://*:8001/login/");

接下去为我们介绍几款BUG跟踪管理软件:

 

仍然是上一篇著作的代码,举行http的绑定的 login 举办监听。

BUG跟踪管理软件——iClap

在 MessagePool 类的  函数

BUG跟踪管理软件——iClap

 

iClap是一款以产品管理为主干、集成多种工具服务的信用社一道软件,在BUG跟踪管理上,iClap也有其性状。

 1  public void ActiveHttp(HttpClient client, string bind, Dictionary<string, string> parms)
 2         {
 3             if (bind.Equals("/login/"))
 4             {
 5                 string strHtml = "ret=";
 6                 strHtml += "Login OK!";
 7                 client.OutputStream.WriteLine(strHtml);
 8                 client.Close();
 9             }
10         }

iClap是哪些兑现BUG跟踪管理的?

 

先是大家先来了然一下BUG的项目,测试人士在测试产品效能性的时候,期间出现的不切合逻辑的操作结果,可以精晓为产品的功效性BUG,还有其它一种BUG相比较烦人的,测试人员在测试游戏的时候现身的系统奔溃,闪退等问题。这里简称为系统BUG。在传统的手游测试中,无论是效用性测试出现的BUG依旧系统活动出现的BUG,测试人士都需要做过多的BUG记录文档。

 

里面、外部测试出现的bug、提出等都会聚在系统后台,方便处理和归档

这样大家得以判断出,请求 bind 是来至于
login的绑定,前面的 parms
是这里请求的参数信息,不管是post依然get请求格局。这里如果需要通晓参数的收获情势请详细在此之前的稿子《C#
利用socekt做到http监听,怎么着才能成就高性能》
 

停放iClap
SDK的游戏或者其它使用在测试的时候,一般的效率性BUG可以经过文字,图片,视频的法子申报给相应的人手,并在iClap后台自动生成记录。在测试过程中冒出的系统BUG(如闪退)则不需要测试人员再去过多的叙说BUG出现前后的场馆,iClap会自动记录用户手续、堆栈信息及控制台日志音信,程序员可依据这些信息迅速精晓暴发BUG的来头。当然,系统BUG同样会在iClap后台生成记录,值得一提的是,iClap后台可在PC及移动端同步查看。

 

这就是说大家打开服务器先测试一下,

BUG跟踪管理软件-BugLog HQ

图片 1

BUG跟踪管理软件-BugLog HQ

 

BugLogHQ是一款免费和开源的工具,紧要效能是拍卖六个使用中的Bug和可能碰到的题目。它能提供统一标准的错误消息显示,允许用户简单的展开搜索,图形化,甚至是跟踪Bug报告。它还会提供一个仪表板来展现聚合的多寡视图,协理用户监督整个项目标例行意况。

可以看出,我们监听login是水到渠成的,

我们得以开头登陆操作了,登陆我们要解决的就是一个http的接连怎么样保障登陆状态。

BUG跟踪管理软件——JIRA

此地的灵感来至于腾讯,百度等api接口的笔触创造的登陆验证办法。

BUG跟踪管理软件——JIRA

为了有利于开展,大家需要从nuget处得到一个第三方类库 json.net
举行数据的json格式输出。

JIRA是一个雅观的对全体软件研爆发命周期(包括计划、开发、发表)举行管制的系列跟踪工具。上万个团体采纳JIRA对日常事务进行跟踪,并使社团向来拿到最新音信。

 

修改一下 ActiveHttp

BUG跟踪管理软件——Bugnet

 1 string strHtml = "ret=";
 2             if (bind.Equals("/login/"))
 3             {
 4                 foreach (var item in parms)
 5                 {
 6                     Console.WriteLine("参数:"+item.Key + ":" + item.Value);
 7 
 8                 }
 9                 strHtml += "Login OK!";
10             }
11             client.OutputStream.WriteLine(strHtml);
12             client.Close();

BUG跟踪管理软件——Bugnet

 

Bugnet是一款开源的问题跟踪&项目管理工具,基于最新的ASP。NET框架、SQL
Server和微软服务器平台。Bugnet可同时管住五个档次、自定义属性、字段、附件、注释、邮件通知等等。

 在浏览器输入 http://127.0.0.1:8001/login/?username=test1&pwd=test1&logintime=2015-4-16%2012:00

请不要在意密码是不是公然传输的。

1 [2015-04-16 12:10:38:287:Info ] Create Http Socket Remote Socket LocalEndPoint:127.0.0.1:8001 RemoteEndPoint:127.0.0.1:4332
2 参数:username:test1
3 参数:pwd:test1
4 参数:logintime:2015-4-16 12:00

例行接收到get传来的登陆数量。

咱俩想成立一个密钥 key值 

string key = "89bf54aca24a457ea32a6a0d81cbcc4e";

 

在开创一个回复类

 

1  class LoginRet
2         {
3             public string Ret { get; set; }
4 
5             public string PWDKey { get; set; }
6         }

 

 1         public void ActiveHttp(HttpClient client, string bind, Dictionary<string, string> parms)
 2         {
 3             LoginRet loginRet = new LoginRet();
 4             if (bind.Equals("/login/"))
 5             {
 6                 if (parms["username"] == "test1" && parms["pwd"] == "test1")
 7                 {
 8                     loginRet.Ret = "Login OK!";
 9                     string pwdkey = parms["username"] + parms["pwd"] + key + parms["logintime"];
10                     byte[] pwdkeyBuffer = UTF8Encoding.Default.GetBytes(pwdkey);
11                     loginRet.PWDKey = Convert.ToBase64String(pwdkeyBuffer);
12                     Logger.Info("用户 " + parms["username"] + " 登陆完成 密钥:" + loginRet.PWDKey);
13                 }
14                 else { loginRet.Ret = "Login Error!"; }
15             }
16             else
17             {
18                 loginRet.Ret = "Login Error!";
19             }
20             string jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(loginRet);
21             client.OutputStream.WriteLine(jsonStr);
22             client.Close();
23         }

修改一下甩卖办法,这里我利用的加密方法,仅仅是最简便易行的,就是把 登陆名 +
登陆密码 + 密钥 + 登录时间
转换成64为字符串,(这里各位同学可以遵照自己项目标其实情状和要求改为md5也好,自己写算法也好,都足以)

这般就赢得了登陆成功后的证据,拿着这一个证据可以在我们另外服务器相同规则下开展无需第二次验证登陆。

 在浏览器输入 http://127.0.0.1:8001/login/?username=test1&pwd=test1&logintime=2015-4-16%2012:00再一次使用这个
url 测试

图片 2

接下去大家抛开浏览器,用客户端程序来尝试,

 

WebRequest request = WebRequest.Create("http://127.0.0.1:8001/login/?username=test1&pwd=test1&logintime=2015-4-16%2012:00");
            request.Method = "GET";           
            string str = new System.IO.StreamReader(request.GetResponse().GetResponseStream(), UTF8Encoding.Default).ReadToEnd();
            Ret = Newtonsoft.Json.JsonConvert.DeserializeObject<LoginRet>(str);
            if (Ret != null && Ret.Ret)
            {
                ConnectManager.GetInstance.AddMsg("登陆成功" + Ret.PWDKey);
            }

修改一下访问形式

图片 3

客户端登陆代码更改为

1 BufferWriter bw = new BufferWriter(1);
2             bw.Write(ConnectManager.GetInstance.Ret.PWDKey);//发送登陆凭据
3             bw.Write("test1");//发送用户名
4             bw.Write("2015-4-16 12:00");//发送时间
5             bw.Write(this.username.Text.TrimEnd());
6             ConnectManager.GetInstance.Client.SendMsg(bw.GetMessage());
7             bw.Dispose();

服务器socket 登陆验证。

 1 string pwdkey = this.bufferReader.ReadString();
 2                     string username = this.bufferReader.ReadString();
 3                     string loginTime = this.bufferReader.ReadString();
 4                     string name = this.bufferReader.ReadString();
 5 
 6                     if (pwdkey == Convert.ToBase64String(UTF8Encoding.Default.GetBytes(username + ServerManager.key + loginTime)))
 7                     {
 8                         if (!LoginManager.GetInstance.LoginNames.Contains(username))
 9                         {
10                             LoginManager.GetInstance.LoginNames.Add(username);
11                             if (!LoginManager.GetInstance.LoginIPs.ContainsKey(Session.ID))
12                             {
13                                 LoginManager.GetInstance.LoginIPs[Session.ID] = username;
14                                 LoginManager.GetInstance.Sessions.Add(Session);
15                             }
16                             srWriter.Write(true);
17                             srWriter.Write(name + " 登陆聊天室");
18                             Logger.Info(Session.RemoteEndPoint + " " + name + " 登陆成功");
19                             ServerManager.GetInstance.Tell_All(srWriter.GetMessage());
20                         }
21                         else
22                         {
23                             srWriter.Write(false);
24                             srWriter.Write("登录名称重复,请换一个");
25                             Logger.Info(Session.RemoteEndPoint + " " + name + " 登录名称重复!");
26                             Session.SendMsg(srWriter.GetMessage());
27                         }
28                     }

 

这时候我们在socket登陆验证只需要验证传入的参数,pwdkey能否扭转相同的。则为登陆成功。

图片 4

成功了健康的娱乐登陆流程,莫倩,页游,手游,都是第三方运营平台,登陆账号和密码,都是第三方的。如若需要http登陆,密钥key到娱乐之中验证。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注