多伺服器遊戲單點登陸設計思路

2021-04-08 23:54:41 字數 2519 閱讀 6995

多伺服器遊戲單點登陸設計思路

大型棋牌類遊戲往往整合多個遊戲,像聯眾邊鋒等,就有中國象棋、西洋棋、圍棋、軍旗等幾十種遊戲,而每種遊戲又有多個遊戲伺服器,比如網通伺服器、電信伺服器等。這個多的遊戲伺服器不可能每個伺服器都含有登陸功能,不然的話就有使系統功能重複,增加開發的工作量,而且最主要的是使得資料同步變得極為困難,甚至是根本不可行。

因此使用乙個或多個專門的登陸伺服器進行登陸驗證時非常有必要的。

登陸伺服器

遊戲伺服器a

遊戲伺服器b

遊戲伺服器c

如上圖,是乙個單登陸伺服器,多個遊戲伺服器的簡單模型。實現單點登陸的難點在於怎麼樣來確定登陸伺服器和遊戲伺服器的

id為同乙個角色。我們以

tcp為例,當乙個玩家進入登陸伺服器之後,他就會跟登陸伺服器建立乙個連線,比如說連線的

socket id

為id1

,這時候這個玩家進入了遊戲伺服器

a,他又會跟遊戲伺服器

a建立乙個連線,假設連線的

socket id

為id2

,我們怎麼樣才能知道這個

id2跟登陸伺服器中的

id1為同乙個人呢?因為只有知道了是同乙個人,我們才能把所有針對

id2的操作告訴

id1,比如可能要把

id2在遊戲中的輸贏情況告訴

id1,或者我們也需要把

id1的一些變化告訴

id2,比如

id1登陸了,或者

id1登出了,這些訊息我們都是需要通知遊戲伺服器中的

id2的。

要做到id1

和id2

互相認識,有乙個做法就是給

id1和

id2傳送乙份相同的字串,我們把它叫做數字簽名,比如使用使用者名稱作數字簽名。這當中的操作順序是:我們首先會連線登陸伺服器,這樣就產生了

id1,當我們連線遊戲伺服器的時候,然後就產生了

id2,這時候讓遊戲伺服器主動和登陸伺服器聯絡,讓它們之間協作在

id1和

id2之間建立聯絡。

當然,如果僅僅使用使用者名稱作數字簽名是很不安全的,因為使用者名稱畢竟不會太長,很容易被猜出。所以有人會使用使用者名稱和密碼一起做數字簽名,但是這樣也會產生乙個問題,那就是每連線一次遊戲伺服器,都需要傳送使用者名稱和密碼,可能會造成使用者名稱密碼洩露。所以更好的解決辦法是產生乙個隨機的字串(當然兩個更好,為了簡單起見,我們舉例的時候就用乙個好了),這個順序是這樣的

玩家程式啟動

—〉產生數字簽名

—〉連線登陸伺服器

—〉產生

id1—

〉告訴id1

數字簽名

玩家連線遊戲伺服器

—〉產生

id2—

〉告訴id2

數字簽名

遊戲伺服器跟登陸伺服器聯絡—〉

id2和

id1互相認識

這種方法可以解決使用者名稱密碼的安全問題,但是無法保證數字簽名的唯一性。所以最好的做法是由登陸伺服器產生這個數字簽名,以避免出現重複的數字簽名,步驟如下面:

玩家程式啟動

—〉連線登陸伺服器

—〉產生

id1—

〉產生數字簽名——〉告訴玩家數字簽名

玩家連線遊戲伺服器

—〉產生

id2—

〉告訴id2

數字簽名

遊戲伺服器跟登陸伺服器聯絡—〉

id2和

id1互相認識。

當然,乙個真正的系統是不可能傳送明文的,所以傳送的資訊必須經過加密處理。為了滿足加解密速度和兼顧保密性的,一般可以採用

des方式對資訊進行加密和解密,而

des的金鑰可以通過

rsa方式得到。這樣的話,上面的過程就是這樣:

玩家程式啟動

—〉連線登陸伺服器

—〉登陸伺服器上面產生

id1—

〉玩家程式生成一對

ras的私鑰和公鑰

—〉玩家程式告訴登陸伺服器公鑰

à登陸伺服器生成

des金鑰

à登陸伺服器使用公鑰加密

des金鑰並把密文傳送給玩家程式

—〉玩家程式用私鑰解開密文,得到

des金鑰

—〉登陸伺服器產生數字簽名——〉登陸伺服器用

des金鑰加密數字簽名並把密文告訴玩家程式

—〉玩家程式用

des金鑰解開得到數字簽名

玩家連線遊戲伺服器

—〉玩家程式生成一對

ras的私鑰和公鑰

—〉玩家程式告訴遊戲伺服器公鑰

à遊戲伺服器生成

des金鑰

à遊戲伺服器使用公鑰加密

des金鑰並把密文傳送給玩家程式

—〉玩家程式用私鑰解開密文,得到

des金鑰

—〉遊戲伺服器上面產生

id2—

〉玩家程式使用

des金鑰加密數字簽名並傳送給

id2

遊戲伺服器跟登陸伺服器聯絡—〉

id2和

id1互相認識。(其中也有

des金鑰產生過程,不再贅述)

ubuntu登陸遠端伺服器

一.使用shh登陸centeros.linux 首先在伺服器上安裝ssh的伺服器端。sudo aptitude install openssh server 2.啟動ssh server。etc init.d ssh restart 3.確認ssh server已經正常工作。netstat tlp ...

SSH登陸遠端伺服器

預設配置 windows下有很多ssh工具。在這裡我是用的是putty。如果安裝了git並配置使用putty的話,就不需要另外在安裝putty了。使用ssh連線伺服器的命令如下 ssh 使用者名稱 ip位址 p 埠號 如果連線成功的話會提示你輸入遠端伺服器的密碼。全部成功之後ssh就會顯示遠端伺服器...

ssh 登陸伺服器原理

這裡分兩種情況,這兩種情況都涉及到公鑰加密的概念。由於公鑰加密概念作為基礎就不在本文進行討論了。使用ssh對遠端伺服器進行密碼登入發生了什麼 客戶端通過ssh連線伺服器 1.首先伺服器把自己的公鑰發給客戶端,客戶端將自己的登入密碼通過伺服器發給自己的公鑰進行加密。然後傳送給伺服器。2.伺服器通過自己...