1. 程式人生 > >遊戲伺服器閘道器設計

遊戲伺服器閘道器設計

閘道器,通俗的講,是訊息達到伺服器的第一關,它負責與客戶端建立連線,接收客戶端傳送過來的訊息,並對訊息進行驗證,分發等。不同的服務系統閘道器負責的功能多少可能不太一樣。但是本質是不變的。

1,閘道器的功能

1.1 與客戶端建立連線


這個應該是閘道器最基本的網功了,一個服務做為閘道器,所有客戶端來的訊息都必須先到達這裡。客戶端與閘道器可能是長連線,比如socket,也可以是短連線,比如http。

1.2 訊息過濾

客戶端可能給伺服器傳送任何訊息,合法的或非法的都有可能。而閘道器對業務服務進行了隔離,訊息到閘道器這,閘道器會對訊息進行解密,解包,對訊息的合法性進行統計一的驗證,過濾出非法的請求,減少業務服務的不必要處理的請求量,減輕業務服務的壓力。

1.3 訊息轉發,負載均衡

閘道器接收到訊息後,根據訊息的路由原則,把訊息分發到不同的業務服務去處理,控制每個業務服務處理的流量大小。而且還可以部署多個閘道器,分散太多客戶端的壓力。

1.4 業務服務的動態擴充套件

閘道器是業務服務訊息的轉發中心,當一個服務的訊息量過大時,可以新增一臺新的伺服器來處理這些訊息。而新的服務只需要註冊到閘道器即可。相反,訊息量減少時,可以動態停止一個服務,撤銷註冊即可。

1.5 保證玩家線上,切換伺服器不需要重新建立連線

如果遊戲伺服器框架採用分線等方式的話,在玩家跳轉到場景或者邏輯伺服器時,不需要斷開與閘道器伺服器的連線,玩家資料在不同遊戲伺服器間的切換是內網切換,切換工作瞬間完成,玩家幾乎察覺不到,這保證了遊戲的流暢性和良好的使用者體驗。

1.6 保持心跳

閘道器伺服器可以定時通過傳送心跳包給正在連線客戶端,保證客戶端與閘道器的連線,如果某個客戶端掉線了,那麼閘道器就通知各個伺服器去做玩家的下線處理邏輯。這樣,避免了邏輯服等出現n個相同角色的bug,從一定程度上,減輕了邏輯伺服器的壓力

2,閘道器實現中用到的第三方技術

1,與客戶端建立連線

由於閘道器需要與客戶端建立大量的連線,需要承載高併發,高效能的任務,對於長連線的閘道器,我們使用netty做為IO通訊的框架,netty的優點想必大家都清楚,有不明白的可以自己百度了。

2,與業務服務通訊,分發訊息包

原理上,我們也可以使用netty進行通訊的客戶端與服務端開發,但是要是做一個高效能的網路通訊元件是一個不小的挑戰。而且訊息不僅僅是簡單的轉發,還有訂單、釋出,通知等。我覺得這個我們可以使用訊息佇列來解決,比如kfka,rabbitmq,activemq等流行的訊息佇列。它們本身都提供了非同步通訊機制,支援單訊息傳送,分佈,訂閱等。我們只需要做一下應用的封裝即可。

3,閘道器的功能實現

1,伺服器搭建

2,訊息解析

3,訊息解密

4,訊息轉發

5,業務服務向網關注冊

6,訊息序列化

7,訊息加密

8,心跳連線

  技術交流,歡迎留言,也可新增QQ交流群:66728073,197321069