摘要:
如果將消息看作是對于特定的應(yīng)用程序具有具體含義的結(jié)構(gòu)化的字節(jié)序列—它的數(shù)據(jù)。那么編碼器是將消息轉(zhuǎn)換為適合于傳輸?shù)母袷剑ㄗ钣锌赡艿木褪亲止?jié)流);而對應(yīng)的解碼器則是將網(wǎng)絡(luò)字節(jié)流轉(zhuǎn)換回應(yīng)用程序的消息格式。 在了解Netty編解碼之前,先了解Java的編解碼: 編碼(Encode)稱為序列化, 它將對象序列
閱讀全文
posted @ 2020-03-24 15:25
kosamino
閱讀(867)
推薦(0)
摘要:
一、什么是粘包、半包 1、粘包半包場景重現(xiàn) 來做這么一個(gè)測試,在Netty客戶端發(fā)送數(shù)據(jù)到Netty服務(wù)端,代碼如下: public void channelActive(ChannelHandlerContext ctx) throws Exception { for (int i = 0; i
閱讀全文
posted @ 2020-03-23 20:18
kosamino
閱讀(840)
推薦(0)
摘要:
Netty提供的ByteBuf不同于JDK中NIO的ByteBuffer,ByteBuf是netty中數(shù)據(jù)傳輸?shù)娜萜鳎荖etty自己實(shí)現(xiàn)的,作為NIO ByteBuffer的替代品,提供了更好的API供開發(fā)者使用。相較于NIO的ByteBuffer更具有卓越的功能性和靈活性。具體NIO的ByteB
閱讀全文
posted @ 2020-03-23 18:32
kosamino
閱讀(1598)
推薦(0)
摘要:
ChannelPipeline 提供了ChannelHandler 鏈的容器,并定義了用于在該鏈上傳播入站和出站事件流的API。ChannelPipeline不是單獨(dú)存在,它肯定會和Channel、ChannelHandler、ChannelHandlerContext關(guān)聯(lián)在一起。 一、Channe
閱讀全文
posted @ 2020-03-19 20:06
kosamino
閱讀(733)
推薦(4)
摘要:
Netty的核心組件的設(shè)計(jì)都很模塊化,如果想要實(shí)現(xiàn)一個(gè)應(yīng)用程序,就需要將這些組件組裝到一起。Netty通過Bootstrap類,以對一個(gè)Netty應(yīng)用程序進(jìn)行配置(組裝各個(gè)組件),并最終使它運(yùn)行起來。對于客戶端程序和服務(wù)器程序所使用到的Bootstrap類是不同的,后者需要使用ServerBoots
閱讀全文
posted @ 2020-03-19 05:25
kosamino
閱讀(1796)
推薦(0)
摘要:
一、EventLoop、EventLoopGroup概述 由下圖所示,NioEventLop是EventLoop的一個(gè)具體實(shí)現(xiàn),EventLoop是EventLoopGroup的一個(gè)屬性,NioEventLoopGroup是EventLoopGroup的具體實(shí)現(xiàn),都是基于ExecutorServic
閱讀全文
posted @ 2020-03-18 05:17
kosamino
閱讀(3229)
推薦(1)
摘要:
如下所示,我們寫一個(gè)簡單的Netty Demo,實(shí)現(xiàn)客戶端與服務(wù)端進(jìn)行通訊。 1、Netty 服務(wù)端啟動類 /** * (1)、 初始化用于Acceptor的主"線程池"以及用于I/O工作的從"線程池"; * (2)、 初始化ServerBootstrap實(shí)例, 此實(shí)例是netty服務(wù)端應(yīng)用開發(fā)的入
閱讀全文
posted @ 2020-03-18 04:20
kosamino
閱讀(3969)
推薦(2)
摘要:
一、什么是Reactor模型 Reactor設(shè)計(jì)模式是event-driven architecture(事件驅(qū)動)的一種實(shí)現(xiàn)方式。Reactor會解耦并發(fā)請求的服務(wù)并分發(fā)給對應(yīng)的事件處理器來處理。 目前,許多流行的開源框架都用到了Reactor模型。如:netty、node.js等,包括java的
閱讀全文
posted @ 2020-03-15 17:39
kosamino
閱讀(2883)
推薦(0)
摘要:
一、AIO簡介 AIO是java中IO模型的一種,作為NIO的改進(jìn)和增強(qiáng)隨JDK1.7版本更新被集成在JDK的nio包中,因此AIO也被稱作是NIO2.0。區(qū)別于傳統(tǒng)的BIO(Blocking IO,同步阻塞式模型,JDK1.4之前就存在于JDK中,NIO于JDK1.4版本發(fā)布更新)的阻塞式讀寫,A
閱讀全文
posted @ 2019-12-13 08:41
kosamino
閱讀(4496)
推薦(3)
摘要:
一、簡介 NIO我們一般認(rèn)為是New I/O(也是官方的叫法),因?yàn)樗窍鄬τ诶系腎/O類庫新增的( JDK 1.4中的java.nio.*包中引入新的Java I/O庫)。但現(xiàn)在都稱之為Non-blocking I/O,即非阻塞I/O,因?yàn)檫@樣叫,更能體現(xiàn)它的特點(diǎn)。而下文中的NIO,不是指整個(gè)新的
閱讀全文
posted @ 2019-12-12 18:12
kosamino
閱讀(2181)
推薦(0)
摘要:
一、BIO簡介 BIO是java1.4之前唯一的IO邏輯,在客戶端通過socket向服務(wù)端傳輸數(shù)據(jù),服務(wù)端監(jiān)聽端口。由于傳統(tǒng)IO讀數(shù)據(jù)的時(shí)候如果數(shù)據(jù)沒有傳達(dá),IO會一直等待輸入傳入,所以當(dāng)有請求過來的時(shí)候,新起一條線程對數(shù)據(jù)進(jìn)行等待、處理,導(dǎo)致每一個(gè)鏈接都對應(yīng)著服務(wù)器的一個(gè)線程。 BIO是同步阻塞的
閱讀全文
posted @ 2019-12-06 04:07
kosamino
閱讀(1075)
推薦(0)
摘要:
一、七層網(wǎng)絡(luò)模型 OSI是Open System Interconnection的縮寫,意為開放式系統(tǒng)互聯(lián)。國際標(biāo)準(zhǔn)化組織(ISO)制定了OSI模型,該模型定義了不同計(jì)算機(jī)互聯(lián)的標(biāo)準(zhǔn),它是一個(gè)七層的、抽象的模型體。 1、物理層 并不是物理媒體本身,它只是開放系統(tǒng)中利用物理媒體實(shí)現(xiàn)物理連接的功能描述和
閱讀全文
posted @ 2019-12-05 05:34
kosamino
閱讀(1604)
推薦(0)
摘要:
在Java項(xiàng)目中,經(jīng)常對JDK版本有不同的要求,可是不可能為了某個(gè)項(xiàng)目的運(yùn)行重新下載不同版本JDK進(jìn)行安裝,這樣就涉及到對本地環(huán)境中多個(gè)JDK版本的管理。 Mac的JDK都是安裝到一個(gè)指定目錄的:/Library/Java/JavaVirtualMachines/,因此可以在這個(gè)目錄下查看自己安裝的
閱讀全文
posted @ 2019-11-29 03:28
kosamino
閱讀(6915)
推薦(0)
摘要:
程序運(yùn)行在內(nèi)存以及IO的體現(xiàn) 首先普及一下常識,如圖所示: 1、在整個(gè)內(nèi)存空間中,跑著各種各樣的程序,有Java程序、C程序,他們共用一塊內(nèi)存空間。 2、對于Java程序,JVM會申請一塊堆空間,通過Xmx可以設(shè)置,其余空間是堆外空間,其中每個(gè)線程有自己的線程棧,保證線程內(nèi)存隔離,堆空間使用完以后,
閱讀全文
posted @ 2019-11-27 20:34
kosamino
閱讀(1682)
推薦(0)
摘要:
一、什么是泛型 Java從1.5之后支持泛型,泛型的本質(zhì)是類型參數(shù),也就是說所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。 若不支持泛型,則表現(xiàn)為支持Object,不是特定的泛型。泛型是對 Java 語言的類型系統(tǒng)的一種擴(kuò)展,以支持
閱讀全文
posted @ 2019-11-15 18:55
kosamino
閱讀(1612)
推薦(0)