官术网_书友最值得收藏!

1.3.2 網(wǎng)關(guān)

網(wǎng)關(guān)就是網(wǎng)絡(luò)通信的第一關(guān),是服務(wù)器上所有服務(wù)的大門。它負(fù)責(zé)與外界聯(lián)系,并且可以“辨正邪,識(shí)真?zhèn)巍保WC內(nèi)部服務(wù)收到的都是合法消息,限制請(qǐng)求流量,防止請(qǐng)求超載。如圖1.2所示,因?yàn)槲覀冇袃煞N不同的通信方式,長(zhǎng)連接通信和短連接通信,所以這里我們定義了兩種不同的網(wǎng)關(guān),用于處理不同協(xié)議的請(qǐng)求。

網(wǎng)關(guān)基本的職責(zé)主要有以下幾點(diǎn)。

●權(quán)限驗(yàn)證。保證請(qǐng)求合法。

●數(shù)據(jù)加密解密。保證數(shù)據(jù)安全,防止消息被修改。

●消息路由。分發(fā)客戶端消息到指定的服務(wù)。

●負(fù)載均衡。當(dāng)請(qǐng)求過大,負(fù)責(zé)分流到多個(gè)服務(wù)處理。

●請(qǐng)求流量控制。將請(qǐng)求流量控制在一定范圍內(nèi),防止流量過大,導(dǎo)致服務(wù)器崩潰。

●如果是長(zhǎng)連接,管理長(zhǎng)連接,使用心跳檢測(cè)保證連接正常或關(guān)閉空閑連接。

●支持不同的協(xié)議,將收到的客戶端消息使用統(tǒng)一的協(xié)議發(fā)送到業(yè)務(wù)服務(wù)。

網(wǎng)關(guān)像一個(gè)過濾器,檢測(cè)并攔截一切非法請(qǐng)求。如果收到非法請(qǐng)求,在網(wǎng)關(guān)就會(huì)將其處理掉,而不會(huì)讓它穿透到業(yè)務(wù)服務(wù)那里。這樣在做業(yè)務(wù)服務(wù)開發(fā)的時(shí)候,特別是在做分布式服務(wù)時(shí),就不用每個(gè)服務(wù)再去做請(qǐng)求檢測(cè)了,只關(guān)注業(yè)務(wù)功能開發(fā)即可。

網(wǎng)關(guān)也像一個(gè)路由器,負(fù)責(zé)客戶端請(qǐng)求消息的轉(zhuǎn)發(fā)和服務(wù)器響應(yīng)消息的返回。這樣不管網(wǎng)關(guān)后面有多少個(gè)業(yè)務(wù)服務(wù),客戶端只需要與網(wǎng)關(guān)建立一條連接即可和所有業(yè)務(wù)服務(wù)通信。

網(wǎng)關(guān)又像一個(gè)閥門,控制客戶端請(qǐng)求的頻率,防止請(qǐng)求過載導(dǎo)致服務(wù)崩潰。這主要是針對(duì)一些惡意客戶端用戶,防止它們使用連發(fā)工具,繞開客戶端代碼的正常防護(hù),對(duì)服務(wù)器發(fā)送大量無(wú)用的請(qǐng)求,造成資源浪費(fèi)。還有惡意者獲取服務(wù)器的IP地址和端口之后,通過某種手段建立大量的空閑連接(只是建立連接,而不發(fā)送任何消息),導(dǎo)致連接長(zhǎng)時(shí)間被占滿,使用戶連接不上服務(wù)器。網(wǎng)關(guān)通過連接空閑檢測(cè),關(guān)閉空閑連接,以節(jié)約服務(wù)器資源給用戶使用。

心跳檢測(cè)是指在客戶端與服務(wù)器都沒有數(shù)據(jù)交互的情況下,一般由客戶端每隔一定時(shí)間向服務(wù)器發(fā)送一個(gè)連接檢測(cè)包,檢測(cè)長(zhǎng)連接是否正常。如果長(zhǎng)時(shí)間未收到任何消息,或在一定時(shí)間內(nèi)收到的都是心跳消息,說(shuō)明當(dāng)前客戶端的連接是空閑的,沒有用戶在操作了,這時(shí),服務(wù)器可以主動(dòng)斷開連接,回收服務(wù)器資源。

網(wǎng)關(guān)也可以對(duì)客戶端不同的協(xié)議進(jìn)行統(tǒng)一轉(zhuǎn)化。比如一個(gè)游戲,剛開始是使用Unity開發(fā)的手機(jī)App客戶端,使用的通信協(xié)議是ProtoBuffer,后來(lái)又想使用H5重新開發(fā)一個(gè)版本,H5使用JSON格式通信,對(duì)于業(yè)務(wù)功能來(lái)說(shuō)都是一樣。所以可以在網(wǎng)關(guān)處把接收到的不同客戶端的消息統(tǒng)一轉(zhuǎn)化為一種格式,然后再轉(zhuǎn)發(fā)到業(yè)務(wù)服務(wù),這樣業(yè)務(wù)服務(wù)不需要任何改動(dòng),就可以支持不同的客戶端類型。

主站蜘蛛池模板: 库车县| 南部县| 斗六市| 隆回县| 馆陶县| 罗山县| 尖扎县| 吐鲁番市| 苍山县| 自贡市| 永登县| 正蓝旗| 陆河县| 吴旗县| 文安县| 长乐市| 平潭县| 勃利县| 扬州市| 苏州市| 闸北区| 星座| 吕梁市| 陵川县| 哈巴河县| 垣曲县| 莆田市| 杂多县| 永丰县| 惠安县| 宁蒗| 尖扎县| 浙江省| 南岸区| 宁武县| 邛崃市| 东宁县| 灌阳县| 卫辉市| 峡江县| 黄平县|