最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java游戲服務(wù)器系列之Netty相關(guān)知識總結(jié)

 更新時間:2021年05月24日 16:45:47   作者:張山大人  
今天帶大家來學(xué)習(xí)Java游戲服務(wù)器的相關(guān)知識,文中對Netty作了非常詳細(xì)的介紹,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下

一、簡介

Java的底層API逐漸復(fù)雜,而開發(fā)者面對的開發(fā)場景需求也在逐漸增大。如果直接針對底層API進(jìn)行編程,無疑是耗時耗力的。這時就催生了極多的編程框架,這些框架隱藏了API實(shí)現(xiàn)的復(fù)雜細(xì)節(jié),以最簡潔的方式給開發(fā)人員提供功能的實(shí)現(xiàn)接口。Netty就是一款針對于網(wǎng)絡(luò)鏈接的框架,他的出現(xiàn)讓服務(wù)器開發(fā)人員更加的集中關(guān)注于更多邏輯的實(shí)現(xiàn),而不為了實(shí)現(xiàn)更好更多更穩(wěn)定的鏈接而頭疼。Netty的核心功能基于NIO 實(shí)現(xiàn)。

二、Netty的應(yīng)用場景

幾乎適用于所有的長短鏈接場景,由于Java應(yīng)用的廣泛性,幾乎所有的互聯(lián)網(wǎng)公司或多或少的都會使用到。博主從事游戲開發(fā),可以說幾乎所有短鏈接游戲服務(wù)器都是使用Netty開發(fā),實(shí)效性要求比較高也有熱修復(fù)需求的服務(wù)器一般不會使用Java,目前采用更多的是C+Lua的組合方式。Java不可以熱修復(fù)是很多長鏈服務(wù)器不考慮java 的一個重要原因。

三、異步和事件驅(qū)動性

NIO 文章中強(qiáng)調(diào)了,這種模型的主要特地拿就是異步和事件驅(qū)動性,異步是服務(wù)器不需要一直等待鏈接輸入直到鏈接關(guān)閉。而是可以在某個特定的時候去相應(yīng)鏈接的輸入,而特定的時候就是另一個事件驅(qū)動性,鏈接發(fā)生變化時,會產(chǎn)生一個事件,而NIO模型檢測到這個事件之后,會去相應(yīng)這個事件的處理事件。

四、Netty核心組件

1.Channel:

Channel時Java-NIO的一個基本構(gòu)造,它代表到一個實(shí)體的開放鏈接,如讀操作和寫操作,在NIO模型中也可以被理解成一個入站或者出站的數(shù)據(jù)載體,可以被關(guān)閉或者關(guān)閉。

2.回調(diào) ChannelHandler:

一個回調(diào)就是一個方法,Netty提供了兩個子類,ChannelInboundHandlerAdapter 以及 ChannelOutboundHandlerAdapter ,這兩個子類分別可以應(yīng)用于數(shù)據(jù)進(jìn)站和出站時期,各種階段的回調(diào),比如入站時Active方法,表明鏈接剛剛被建立起,代碼如下:

public class ConnectHandler extend ChannelInboundHandlerAdapter{
	@override
	public void ChannelActive(ChannelHandlerContext ctx){
		//數(shù)據(jù)入站回調(diào)子類被建立時調(diào)用,也就是鏈接建立時調(diào)用
		System.out.println("遠(yuǎn)程客戶端 : "+ ctx.channel().remoteAddress() + '建立鏈接');
	}
}

不了解Netty的讀者看到這里可能會有點(diǎn)疑惑,這個類應(yīng)該怎么用。這里簡單的解釋一下:這種類會在Netty創(chuàng)建的時候注冊進(jìn)服務(wù)中,然后在數(shù)據(jù)進(jìn)站、出站的不同階段,調(diào)用這個類中不同的回調(diào)函數(shù),以處理不同的開發(fā)需求??梢躁P(guān)注一下讀者其他的文章

3.Future:

jdk-Future:Java中提供了Future的實(shí)現(xiàn),這種Futrue可以看作是一個異步操作結(jié)果的占位符。我們可以通過這個Future查詢到這個異步操作的結(jié)果,并進(jìn)行一些處理。比如在操作失敗的時候拋出異常。但是jdk內(nèi)置的Future的查詢只能在某個時刻手動去查詢結(jié)果,或者直接阻塞這個異步操作,直到異步完成操作之后可以查詢Future的成功或者失敗。
ChannelFuture:Netty內(nèi)部提供的Future實(shí)現(xiàn)類,很多異步操作在執(zhí)行的時候都會返回一個ChannelFuture對象,我們可以針對這個ChannelFuture對象設(shè)置一些回調(diào)函數(shù),比如重寫operationComplete()方法,這樣這個異步事件在完成的時候會自動調(diào)用這個方法,并且執(zhí)行我們自己的處理邏輯。
接下來可以看一下ChannelFuture的應(yīng)用實(shí)例,檢測Netty服務(wù)器鏈接遠(yuǎn)程地址是否成功:

Channel channel = "";
//鏈接地址192.168.100.113 的7000端口
InetSocketAddress socketAddress = new InetSocketAddress("192.168.100.113",7000);
//管道綁定地址并返回一個ChannelFuture
ChannelFuture channelFuture = channel.connect(socketAddress);
//給ChannelFuture設(shè)置完成回調(diào),判斷這個操作是否完成
channelFuture.addListener(new ChannelFutureListener(){
		@override
		public void operationComplete(ChannelFuture future){
			if(future.isSucess()){
				//創(chuàng)建一個字符串,并指定所使用的字符集,下面這種寫法是Netty中經(jīng)常遇到的
				ByteBuf buffer = Unpooled.copiedBuffer("Hello",Charset.defaultCharset());
				//發(fā)送信息并且返回一個新的writeFuture,依舊可以根據(jù)這個writeFuture處理一些邏輯
				ChannelFuture writeFuture = future.channel().writeAndFlush(buffer);
			}else{
				//鏈接失敗則答應(yīng)出失敗的消息
				Throwable cause = future.cause();
				cause.printStackTrace();
			}
		}
})

五、總結(jié)

Netty以一種異步事件驅(qū)動以及回調(diào)的方式,能幫我們快速完善服務(wù)器處理數(shù)據(jù)的進(jìn)出,以及各個流程細(xì)節(jié)中的處理邏輯。極大的精簡了服務(wù)器開發(fā)人員在,鏈接處理,數(shù)據(jù)出入方面的開發(fā)工作。是一個及其易用且穩(wěn)定的網(wǎng)絡(luò)開發(fā)框架。

到此這篇關(guān)于Java游戲服務(wù)器系列之Netty相關(guān)知識總結(jié)的文章就介紹到這了,更多相關(guān)Java Netty內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • servlet之ServletContext簡介_動力節(jié)點(diǎn)Java學(xué)院整理

    servlet之ServletContext簡介_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了servlet之ServletContext簡介,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 如何利用Java使用AOP實(shí)現(xiàn)數(shù)據(jù)字典轉(zhuǎn)換

    如何利用Java使用AOP實(shí)現(xiàn)數(shù)據(jù)字典轉(zhuǎn)換

    這篇文章主要介紹了如何利用Java使用AOP實(shí)現(xiàn)數(shù)據(jù)字典轉(zhuǎn)換,AOP也是我們常說的面向切面編程,AOP在我們開發(fā)過程中應(yīng)用也比較多,在這里我們就基于AOP來實(shí)現(xiàn)一個數(shù)據(jù)字典轉(zhuǎn)換的案例
    2022-06-06
  • java中HashMap的7種遍歷方式與性能分析

    java中HashMap的7種遍歷方式與性能分析

    本文主要介紹了java中HashMap的7種遍歷方式與性能分析,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • @JsonFormat?和?@DateTimeFormat?時間格式化注解(場景示例代碼)

    @JsonFormat?和?@DateTimeFormat?時間格式化注解(場景示例代碼)

    這篇文章主要介紹了@JsonFormat和@DateTimeFormat時間格式化注解,本文通過場景示例代碼詳解給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • 使用SpringBoot自定義starter的完整步驟

    使用SpringBoot自定義starter的完整步驟

    這篇文章主要給大家介紹了關(guān)于使用SpringBoot自定義starter的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • mybatis plus開發(fā)過程中遇到的問題記錄及解決

    mybatis plus開發(fā)過程中遇到的問題記錄及解決

    這篇文章主要介紹了mybatis plus開發(fā)過程中遇到的問題記錄及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • MyBatis的foreach語句詳解

    MyBatis的foreach語句詳解

    這篇文章主要介紹了MyBatis的foreach語句詳解的相關(guān)資料,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • SpringMVC實(shí)現(xiàn)簡單跳轉(zhuǎn)方法(專題)

    SpringMVC實(shí)現(xiàn)簡單跳轉(zhuǎn)方法(專題)

    這篇文章主要介紹了SpringMVC實(shí)現(xiàn)簡單跳轉(zhuǎn)方法(專題),詳細(xì)的介紹了SpringMVC跳轉(zhuǎn)的幾種方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-03-03
  • 使用idea開發(fā)javaWeb應(yīng)用程序的思路(實(shí)現(xiàn)用戶的增刪改查)

    使用idea開發(fā)javaWeb應(yīng)用程序的思路(實(shí)現(xiàn)用戶的增刪改查)

    這篇文章主要介紹了使用idea開發(fā)javaWeb應(yīng)用程序的思路(實(shí)現(xiàn)用戶的增刪改查),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Spring中基于xml的聲明式事務(wù)示例詳解

    Spring中基于xml的聲明式事務(wù)示例詳解

    這篇文章主要介紹了Spring之基于xml的聲明式事務(wù),本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09

最新評論

余干县| 宁河县| 临武县| 桑日县| 霸州市| 同德县| 浦东新区| 衡南县| 遂宁市| 新绛县| 北辰区| 高阳县| 临潭县| 汾阳市| 达尔| 太白县| 绥宁县| 偏关县| 舟曲县| 武隆县| 涡阳县| 昌江| 定州市| 四川省| 宁安市| 柯坪县| 南澳县| 玛多县| 合肥市| 大厂| 信丰县| 绵阳市| 玛沁县| 建平县| 新野县| 鸡东县| 盐津县| 定州市| 阿克| 京山县| 莫力|