Netty构建游戏服务器(一)--基本概念与原理
?
一,Netty是什么
1,Netty是由?JBOSS?提供的一個(gè)?java開源?框架。
2,Netty是JAR包,一般使用ALL-IN-ONE的JAR包就可以開發(fā)了。
3,Netty不需要運(yùn)行在Tomcat這類服務(wù)器中,他是單獨(dú)構(gòu)建一個(gè)服務(wù)器。
4,Netty可以構(gòu)建HTTP服務(wù)器,socket服務(wù)器,websocket服務(wù)器等。
5,Netty其實(shí)是對(duì)JDK1.4以后提供的NIO的封裝,NIO就是new i/o,JDK1.7推出了NIO2。
二,Netty服務(wù)架構(gòu)圖
以下官方圖展示了Netty基本提供的服務(wù):
主要提供的就是HTTP服務(wù)器,socket服務(wù)器,websocket服務(wù)器。
三,Netty原理架構(gòu)圖
從下面的原創(chuàng)圖,可以基本看出Netty構(gòu)建服務(wù)器的原理
1,組件名詞解釋
(1),Bootstrap / ServerBootstrap(建立連接):
Netty引導(dǎo)組件,簡(jiǎn)化NIO的開發(fā)步驟,是一個(gè)Netty程序的開始,作用是配置和串聯(lián)各個(gè)組件。
(2)EventLoopGroup(事件循環(huán)組):
是EventLoop組合,可以包含多個(gè)EventLoop。創(chuàng)建一個(gè)EventLoopGroup的時(shí)候,內(nèi)部包含的方法就會(huì)創(chuàng)建一個(gè)子對(duì)象EventLoop。
(3)EventLoop(事件循環(huán)):
循環(huán)服務(wù)Channel,可以包含多個(gè)Channel。
(4)Channel(通道):
代表一個(gè)Scoket連接,或者其他IO操作組件。
(5)ChannelInitializer(初始化連接):
主要提供了一個(gè)傳輸通道ChannelPipeline。
(6)ChannelPipeline(傳輸通道):
主要是管理各種ChannelHandler業(yè)務(wù)控制器,提供一個(gè)鏈?zhǔn)焦芾砟J健?/p>
(7)ChannelHandler(業(yè)務(wù)控制器):
主要業(yè)務(wù)寫入的地方,由開發(fā)人員寫入,Netty也提供了很多寫好的控制器和適配器,可以直接引用。
(8)ChannelInboundHandler(通道傳入控制器):
繼承至ChannelHandler,在傳輸通道中對(duì)傳入事件進(jìn)行控制。
(9)ChannelOutboundHandler(通道傳出控制器):
繼承至ChannelHandler,在傳輸通道中對(duì)傳出事件進(jìn)行控制。
(10)Decoder(解碼):
網(wǎng)絡(luò)傳輸都是byte傳輸,所以Netty首先接收到的是byte,需要進(jìn)行解碼,編程JAVA對(duì)象。
Netty提供了很多解碼器,包括服務(wù)架構(gòu)圖(最上)顯示的Google Protobuf編碼,這是Google提供的跨平臺(tái)的小體積編碼方式,在Netty中可以直接解碼。
(11)Encoder(編碼):
和解碼類似,在傳出服務(wù)器的時(shí)候,需要編碼成byte傳輸給客戶端。
(12)Future /?ChannelFuture(消息返回,圖上沒有):
Netty提供的返回結(jié)果,類似回調(diào)函數(shù),告知你執(zhí)行結(jié)果是什么。
2,構(gòu)建服務(wù)器基本方法
從原理架構(gòu)圖可以看出,構(gòu)建一個(gè)Netty服務(wù)器基本需要3個(gè)步驟:
1),ServerBootstrap(建立連接):構(gòu)建一個(gè)Scoket或者其他連接,通過事件循環(huán)建立通道。
2),ChannelInitializer(初始化連接):構(gòu)建傳輸通道,用于管理控制器。
3),ChannelHandler(業(yè)務(wù)控制器):構(gòu)建業(yè)務(wù)控制器,最基本的是解碼,編碼,信息傳入/傳出。
同樣,構(gòu)建一個(gè)客戶端,同樣也是這些步驟,不過建立連接是使用Bootstrap,并且使用一個(gè)事件循環(huán),而服務(wù)器一般使用兩個(gè)事件循環(huán)。
具體代碼可以看一下節(jié)內(nèi)容:構(gòu)建一個(gè)最簡(jiǎn)單的socket服務(wù)器與客戶端。
四,Netty構(gòu)建游戲服務(wù)器有什么優(yōu)勢(shì)
1,游戲服務(wù)器是一個(gè)復(fù)雜的組成,基本要求是低延遲和高并發(fā)。游戲服務(wù)器經(jīng)常需要各種通信,例如地圖服務(wù)器、網(wǎng)管服務(wù)器、聊天服務(wù)器之間的通信。Netty的異步NIO框架可以保證高性能的通信能力。
2,靈活的編碼解碼定制能力,滿足不同游戲場(chǎng)景下的多協(xié)議和私有協(xié)議編解碼。
3,可配置的線程池,TCP參數(shù),提供差異化定制能力。
4,黑白名單過濾(IP過濾),SSL安全,可以用于登錄認(rèn)證環(huán)節(jié)。
5,Netty心跳檢測(cè)(鏈路有效性檢測(cè)),用于檢測(cè)客戶端是否處于活躍狀態(tài)。心跳檢測(cè)是指,服務(wù)器定期向客戶端發(fā)送指定內(nèi)容,通過反饋來判斷鏈路是否可用,客戶端是否活著,是否可以正常接收和發(fā)送消息。
6,流量整形,一種主動(dòng)調(diào)整流量輸出速率的措施。作用是
1),防止由于上下游網(wǎng)元性能不均衡導(dǎo)致下游網(wǎng)元被壓垮,業(yè)務(wù)流程中斷;
2),防止由于通信模塊接收消息過快,后端業(yè)務(wù)線程處理不及時(shí)導(dǎo)致的“撐死”問題。
流行整形原理是將廢棄報(bào)文先緩存,放入隊(duì)列中,當(dāng)具有足夠令牌的時(shí)候在發(fā)送緩存的報(bào)文。這種做法可以緩解壓力,但是有一定的延遲。
7,日志統(tǒng)計(jì)能力,提供游戲服務(wù)可服務(wù)性。
8,基于內(nèi)存池的對(duì)象重用技術(shù),降低GC頻度,使得玩家不卡。
?
轉(zhuǎn)載于:https://www.cnblogs.com/WangBoBlog/p/8718044.html
總結(jié)
以上是生活随笔為你收集整理的Netty构建游戏服务器(一)--基本概念与原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。