亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

一步一步開發Game服務器(二)登陸2

2019-11-17 02:26:36
字體:
來源:轉載
供稿:網友

一步一步開發Game服務器(二)登陸2

上一篇文章,講解了簡單的登陸情況。接下來我們繼續講解登陸模塊。

在正常的游戲服務器情況下。在尚未登錄前可以查看服務器大區情況,登陸后也可以查看服務器大區情況,然后選擇大區服務器。進行登錄操作。

這樣的情況就需要我們有一個登錄服務器來負責,目前大區服務器的狀態,是正常。擁擠,爆滿。還是停服維護。那么這樣登錄服務器,如果進行控制和輸出呢?

如何與大區服務器正常進行通信已經同步登錄狀態呢?

登錄服務器,可以看作是我們其他大區服務器的網關服務器。那么勢必為了保證服務器的高可用性,已經內存等資源消耗。我們這里的數據交換肯定不能依賴于socket連接進行。這樣消耗會很大,這里其實只需要查看服務器狀態和登陸即可。那么我們需要http就能順利完成的工作。無需長連接,就無需考慮連接狀態。

那么這種情況,http雖然能減少消耗,返回服務器狀態。但是也要保證玩家的登陸狀態,還要與其他服務器保持同步狀態。那么基于IIS或者tomcat肯定是無法完成了。

這里就有了自定義開發的基于Socket 的服務器程序來今天http協議監聽。具體的文章之前有過介紹(詳見)。

今天我們就來真正完成http登陸模塊。

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

依舊是上一篇文章的代碼,進行http的綁定的 login 進行監聽。

在 MessagePool 類的 函數

 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         }

這樣我們可以判斷出,請求 bind 是來至于 login的綁定,后面的parms 是此處請求的參數信息,不管是post還是get請求方式。這里如果需要了解參數的獲取方式請詳見以前的文章 《C# 利用socekt做到http監聽,怎么樣才能做到高性能》

那么我們開啟服務器先測試一下,

可以看到,我們監聽login是成功的,

我們可以開始登陸操作了,登陸我們要解決的就是一個http的連接如何保持登陸狀態。

這里的靈感來至于騰訊,百度等api接口的思路創建的登陸驗證方式。

為了方便進行,我們需要從nuget處獲取一個第三方類庫 json.net 進行數據的json格式輸出。

修改一下ActiveHttp

 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();

在瀏覽器輸入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:43322 參數:username:test13 參數:pwd:test14 參數:logintime:2015-4-16 12:00

正常接收到get傳來的登陸數據。

我們想創建一個密鑰 key值

string key = "89bf54aca24a457ea32a6a0d81cbcc4e";

在創建一個回復類

1  class LoginRet2         {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             else17             {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 測試

接下來我們拋棄瀏覽器,用客戶端程序來試試,

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);            }

修改一下訪問模式

客戶端登陸代碼更改為

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                         else22                         {23                             srWriter.Write(false);24                             srWriter.Write("登錄名稱重復,請換一個");25                             Logger.Info(Session.RemoteEndPoint + " " + name + " 登錄名稱重復!");26                             Session.SendMsg(srWriter.GetMessage());27                         }28                     }

此時我們在socket登陸驗證只需要驗證傳入的參數,pwdkey能否生成相同的。則為登陸成功。

完成了正常的游戲登陸流程,莫倩,頁游,手游,都是第三方運營平臺,登陸賬號和密碼,都是第三方的。如果需要http登陸,密鑰key到游戲內部驗證。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品videosex性欧美| 亚洲人免费视频| 亚洲免费视频在线观看| 日本中文字幕久久看| 亚洲精品美女网站| 欧美大片在线看| 日韩在线观看电影| 久久久免费观看| 久久亚洲精品中文字幕冲田杏梨| 亚洲国产精久久久久久| 国产精品久久久久久久久久东京| 日韩av毛片网| 亚洲午夜精品久久久久久久久久久久| 91国产中文字幕| 亚洲aa在线观看| 日韩精品久久久久久久玫瑰园| 欧美与欧洲交xxxx免费观看| 亚洲精品电影久久久| 欧美成人四级hd版| 国产精品69精品一区二区三区| 日韩在线观看免费av| 日韩人体视频一二区| 欧美激情在线观看视频| 日韩国产欧美精品一区二区三区| 91精品国产自产91精品| 亚洲一级黄色片| 在线亚洲男人天堂| 国模精品视频一区二区三区| 欧美猛男性生活免费| 国产精品第8页| 在线成人免费网站| 国产精品观看在线亚洲人成网| 成人xvideos免费视频| 久久成人一区二区| 亚洲国产91精品在线观看| 亚洲一区二区三区视频| 国产精品一区久久久| 国产精品免费久久久久影院| 国产亚洲精品久久久久久777| 国产丝袜一区二区三区免费视频| 亚洲高清在线观看| 国产精品中文在线| 狠狠色噜噜狠狠狠狠97| 欧美日韩激情网| 色老头一区二区三区| 91精品视频免费观看| 欧美一级淫片丝袜脚交| 国产综合香蕉五月婷在线| 国产精品日韩在线播放| 日韩中文字幕第一页| 久久久久久中文| 国产91热爆ts人妖在线| 国产亚洲精品日韩| 国产精品成人国产乱一区| 久久免费精品日本久久中文字幕| 日韩av中文在线| 久久久久久国产三级电影| 色综合久综合久久综合久鬼88| 奇米影视亚洲狠狠色| 国产精品日韩专区| 九九精品在线视频| 色哟哟入口国产精品| 欧美理论在线观看| www亚洲精品| 青青草原一区二区| 亚洲国产精品一区二区三区| 中文字幕在线观看亚洲| 爽爽爽爽爽爽爽成人免费观看| 久久青草精品视频免费观看| 国产色综合天天综合网| 精品免费在线观看| 欧美性生活大片免费观看网址| 成人在线精品视频| 国产香蕉一区二区三区在线视频| 成人444kkkk在线观看| 欧美日韩亚洲精品一区二区三区| 久久成人av网站| 国产91精品最新在线播放| 亚洲国产成人久久综合一区| 国产精品影片在线观看| 欧美成人免费全部| 91深夜福利视频| 国产欧美日韩中文字幕在线| 欧美性猛交xxxx| 国产精品一区二区三区在线播放| 狠狠做深爱婷婷久久综合一区| 亚洲伊人久久大香线蕉av| 2021久久精品国产99国产精品| 午夜精品一区二区三区视频免费看| 久久久久久97| 日韩成人在线观看| 综合网日日天干夜夜久久| 欧美做受高潮1| 51精品国产黑色丝袜高跟鞋| 国产亚洲欧美另类中文| 国产精品久久久久久久久免费| 亚洲成人av资源网| 日韩av有码在线| 精品国产一区久久久| 精品香蕉一区二区三区| 国内精品久久久| 国产精品人人做人人爽| 亚洲国产精品久久| 欧美劲爆第一页| 欧美小视频在线观看| 久久久国产精品视频| 欧美黑人巨大xxx极品| 亚洲第一网站免费视频| 成人写真视频福利网| 久久久免费精品视频| 日韩视频精品在线| 精品久久中文字幕| 亚洲91精品在线观看| 亚洲精品xxx| 成人国内精品久久久久一区| 国产精品久久久久久久一区探花| 精品中文字幕久久久久久| 欧美激情一级精品国产| 成人做爰www免费看视频网站| 国产欧美日韩高清| 精品电影在线观看| 亚洲人成绝费网站色www| 亚洲成年人在线播放| 另类少妇人与禽zozz0性伦| 久久久久久亚洲精品| 一区二区欧美激情| 欧美激情视频在线| 亚洲欧美在线一区二区| 午夜精品一区二区三区av| 日韩欧美国产一区二区| 91超碰中文字幕久久精品| 狠狠色香婷婷久久亚洲精品| 亚洲xxxx在线| 欧美激情乱人伦一区| 亚洲欧美日韩中文视频| 97精品久久久中文字幕免费| 精品国产一区二区三区四区在线观看| 日韩视频永久免费观看| 亚洲精品少妇网址| 日韩av黄色在线观看| 欧美视频免费在线观看| 欧美精品videosex性欧美| 亚洲成色777777在线观看影院| 久久频这里精品99香蕉| 日韩久久精品电影| 日韩大陆欧美高清视频区| 日韩视频免费大全中文字幕| 欧美激情免费观看| 国产精品一二区| 久久精品美女视频网站| 精品综合久久久久久97| 一区二区欧美日韩视频| 久久久精品国产一区二区| 久久久av亚洲男天堂| 俺去啦;欧美日韩| 91精品国产91久久久久福利| 国产精品一区二区久久国产| 欧美性极品xxxx做受| 日韩av一区在线| 中日韩美女免费视频网址在线观看| 国产精品网站视频| 国产不卡av在线| 日韩中文字幕免费| 自拍偷拍亚洲区|