@netty

Stories List
@flydean

網絡協議之:socket協議詳解之Socket和Stream Socket

簡介 不管是在普通的網絡編程中還是在netty中,都經常會提到一個詞叫做socket,好像socket是一個神奇的東西,使用socket我們可以建立客户端到服務器端的連接,並且和進行客户端和服務器端的通訊,那麼socket到底是什麼呢?它有哪些分類呢?一起來看看吧。 Socket是什麼 socket的中文翻譯是套接字,個人覺的這個翻譯真的是太差勁了,套接字聽起來毫無意義,所以很多人在第一次聽到so

flydean Avatar

@flydean

Nickname flydean

@fulng

java.io.IOException: 遠程主機強迫關閉了一個現有的連接。異常堆棧信息問題處理(屏蔽)!【轟隆隆原創】

當我們使用Socket開發服務器間相互通信的時候,應該都遇到這個異常,正常情況下,這個是由於客户端和服務器端網絡異常或者強制斷開所產出的異常,具體如下: java.io.IOException: 遠程主機強迫關閉了一個現有的連接。 at sun.nio.ch.SocketDispatcher.read0(Native Method) at sun.nio.ch.SocketDisp

fulng Avatar

@fulng

Nickname 轟隆隆

@luoliaogejide_59dd75c31ca74

WebSocketServerProtocolHandler是如何實現將網絡數據解碼成WebSocketFrame的

WebSocketServerProtocolHandler的本質是MessageToMessageDecoderWebSocketFrame,也就是別的handler把數據轉成WebSocketFrame之後,數據到它這兒,他才能處理,但是demo代碼裏沒有手動添加一個將ByteBuf轉成WebSocketFrame的handler,這個問題好像通義也沒有收錄,最終在chatgpt4o那裏找

luoliaogejide_59dd75c31ca74 Avatar

@luoliaogejide_59dd75c31ca74

Nickname 站在巨人的肩上

@bin_60080bc5146e1

聊一聊 Netty 數據搬運工 ByteBuf 體系的設計與實現

本文基於 Netty 4.1.56.Final 版本進行討論 時光芿苒,歲月如梭,好久沒有給大家更新 Netty 相關的文章了,在斷更 Netty 的這段日子裏,筆者一直在持續更新 Linux 內存管理相關的文章 ,目前為止,算是將 Linux 內存管理子系統相關的主幹源碼較為完整的給大家呈現了出來,同時也結識了很多喜歡內核的讀者,經常在後台留言討論一些代碼的設計細節,在這個過程中,我們相互分享,

bin_60080bc5146e1 Avatar

@bin_60080bc5146e1

Nickname bin的技術小屋

@menglihuaxiangbian

Netty源碼解析-零拷貝

摘要 Netty源碼系列-Netty如何使用零拷貝 1、零拷貝 Netty為了加快文件傳輸速度,採用了零拷貝技術。 sendFile(Kafka也是用該技術優化性能):發送文件描述符,如果硬件支持,圖二的文件緩衝區和Socket緩衝區可以共享,只需要兩次DMA拷貝就可以 1.1 、源碼DefaultFileRegion.transferto()方法 我們看一下源碼,Netty的文件傳

menglihuaxiangbian Avatar

@menglihuaxiangbian

Nickname 杜若

@bin_60080bc5146e1

小小的引用計數,大大的性能考究

本文基於 Netty 4.1.56.Final 版本進行討論 在上篇文章《聊一聊 Netty 數據搬運工 ByteBuf 體系的設計與實現》 中,筆者詳細地為大家介紹了 ByteBuf 整個體系的設計,其中筆者覺得 Netty 對於引用計數的設計非常精彩,因此將這部分設計內容專門獨立出來。 Netty 為 ByteBuf 引入了引用計數的機制,在 ByteBuf 的整個設計體系中,所有的 Byt

bin_60080bc5146e1 Avatar

@bin_60080bc5146e1

Nickname bin的技術小屋

@menglihuaxiangbian

Netty對處理粘包和半包的支持

1.1 什麼是粘包拆包 例如:發送 ABC, DEF兩個報文 收到ABCDEF一個報文,發生了粘包 收到AB,C,DEF三個報文,ABC發生了拆包 收到AB,CD,EF三個報文,即發生了拆包又發生了粘包 1.2 看一個粘包半包樣例 客户端每次把消息“ABC,DEF,GHI,JKL,MNO\n" 發生一百次給服務端 服務端將每次收到的消息輸出,並記錄收到的次數,然後將消息返回客户端

menglihuaxiangbian Avatar

@menglihuaxiangbian

Nickname 杜若

@menglihuaxiangbian

Netty與網絡編程

要了解Netty,必須先了解網絡編程 1 網絡編程 1.1 網絡IO模型 1.1.1 網絡三種I/O模型分類: BIO:(同步 阻塞)jdk1.4以前 java.io包 NIO:(同步 非阻塞)jdk1.4 java.nio包 AIO:(異步 非阻塞)jdk1.7 java.nio包 1.1.2 BIO、NIO、AIO處理模式 1)BIO:一個連接一個線程,客户端有連接請求時服務器端

menglihuaxiangbian Avatar

@menglihuaxiangbian

Nickname 杜若

@menglihuaxiangbian

Netty源碼解析-底層原理及IO模式

1、Netty源碼編譯 我們看一下版本4.1.40.Final-SNAPSHOT源碼包,可以把源碼pull到本地,用IDEA打開。 github地址:https://github.com/netty/netty 包含的模塊如下圖: 2、Netty 源碼核心包 2.1 Netty源碼核心包主要分成下面幾塊: 1、工具類 下圖紅色的模塊,如buffer、common、resolver 2、底層協議(

menglihuaxiangbian Avatar

@menglihuaxiangbian

Nickname 杜若

@menglihuaxiangbian

Netty源碼解析-零拷貝

這是Netty的一個重要優化,為了解決I/O操作速度影響性能,採用零拷貝的技術 1、零拷貝 sendFile(Kafka也是用該技術優化性能):發送文件描述符,如果硬件支持,圖二的文件緩衝區和Socket緩衝區可以共享,只需要兩次DMA拷貝就可以 1.1 源碼DefaultFileRegion.transferto()方法 我們看一下源碼,Netty的文件傳輸零拷貝方法就是該方法,方法下面圈出來

menglihuaxiangbian Avatar

@menglihuaxiangbian

Nickname 杜若

@menglihuaxiangbian

Netty源碼解析-鎖機制

為了提高性能,Netty對鎖也做了大量優化 1、鎖優化技術 Netty大量使用了鎖優化技術: 1.1 減小鎖粒度 1.2 減少鎖對象的空間佔用 1.3 提高鎖的性能 1.4 根據不同業務場景選擇合適鎖 1.5 能不用鎖則不用鎖 1.1 減小鎖粒度 在Netty4.1.15.Final版本中ServerBootstrap.init方法中有兩個地方對對象加鎖,而不是在方法上加一個大鎖,縮

menglihuaxiangbian Avatar

@menglihuaxiangbian

Nickname 杜若

@menglihuaxiangbian

Netty源碼解析-請求處理與多路複用

NioEventLoop是什麼? 如圖,NioEventLoop是worker threads中的thread,也就是處理請求的線程,屬於NioEventLoopGroup,那麼多個線程每次選擇哪個線程來處理請求呢? 1.1 Netty給Channel分配Nio Event Loop的規則 看下圖,EventLoopGroup是線程組,每個EventLoop是一個線程,那麼線程處理請求是怎麼分配

menglihuaxiangbian Avatar

@menglihuaxiangbian

Nickname 杜若

@menglihuaxiangbian

Netty源碼-責任鏈模式運用

Netty基本介紹,參考juejin.cn/post/740884… 1、Netty的責任鏈模式 1.1 責任鏈模式實現樣例 基於上圖,寫一個責任鏈模式的案例如下: 從下面的例子我們可以知道,責任鏈模式包含下面幾個重要的部分: HandlerChainContext:hander上下文,也就是責任鏈中的節點,持有一個handler,並有指向下一個節點的指針 Handler: 責任處理器

menglihuaxiangbian Avatar

@menglihuaxiangbian

Nickname 杜若

@menglihuaxiangbian

Netty源碼-Server啓動流程

Netty基本介紹,參考 https://juejin.cn/post/7408844429370834954 1、主線程: Netty源碼包的mnetty-example模塊隨便打開一個實現樣例,比如包io.netty.example.echo下的EchoServer,我們從這裏的源碼開始看 Server啓動流程: 創建Selector -》創建ServerSocketChannel -》 初始

menglihuaxiangbian Avatar

@menglihuaxiangbian

Nickname 杜若

@menglihuaxiangbian

Netty源碼-業務流程之寫數據

Netty基本介紹,參考 Netty與網絡編程 1、源碼分析,EchoServerHandler之Write流程 1.1 write流程入口 通常我們通過ChannelRead收到消息後,需要給一個響應,通過ctx.write()將響應返回客户端。 在自定義handler的channelRead方法打一個斷點,客户端發起請求,並進入ctx.write 1.2 AbstractChannelHa

menglihuaxiangbian Avatar

@menglihuaxiangbian

Nickname 杜若

@menglihuaxiangbian

Netty源碼-業務流程之構建連接

Netty基本介紹,參考 https://juejin.cn/post/7408844429370834954 1、Netty構建連接 構建連接的流程 1.1 我們知道客户端連接服務端都是通過NioEventLoop來處理請求,NioEventLoop是一個線程,連接進來首先進入run()方法。 所以我們需要啓動服務端,然後再啓動客户端發起連接,我們在run()方法打個斷點看一下。 從ru

menglihuaxiangbian Avatar

@menglihuaxiangbian

Nickname 杜若

@menglihuaxiangbian

Netty源碼-業務流程之請求處理

1、業務處理流程 1.1 主從模型 1.2 Debug跟蹤 我們用Netty源碼包下面的example來Debug觀察一下,包路徑io.netty.example.echo NioEventLoop#processSelectedKeysOptimized()方式循環處理不同的事件。如下圖。 NioEventLoop#processSelectedKey方法處理一個事件,在該方法中的un

menglihuaxiangbian Avatar

@menglihuaxiangbian

Nickname 杜若

@bin_60080bc5146e1

談一談 Netty 的內存管理 —— 且看 Netty 如何實現 Java 版的 Jemalloc

本文基於 Netty 4.1.112.Final 版本進行討論 在之前的 Netty 系列中,筆者是以 4.1.56.Final 版本為基礎和大家討論的,那麼從本文開始,筆者將用最新版本 4.1.112.Final 對 Netty 的相關設計展開解析,之所以這麼做的原因是 Netty 的內存池設計一直在不斷地演進優化。 在 4.1.52.Final 之前 Netty 內存池是基於 jemalloc

bin_60080bc5146e1 Avatar

@bin_60080bc5146e1

Nickname bin的技術小屋

@bin_60080bc5146e1

Netty 如何自動探測內存泄露的發生

本文基於 Netty 4.1.112.Final 版本進行討論 本文是 Netty 內存管理系列的最後一篇文章,在第一篇文章 《聊一聊 Netty 數據搬運工 ByteBuf 體系的設計與實現》 中,筆者以 UnpooledByteBuf 為例,從整個內存管理的外圍對 ByteBuf 的整個設計體系進行了詳細的拆解剖析,隨後在第二篇文章 《談一談 Netty 的內存管理 —— 且看 Netty 如

bin_60080bc5146e1 Avatar

@bin_60080bc5146e1

Nickname bin的技術小屋

@bin_60080bc5146e1

時間輪在 Netty , Kafka 中的設計與實現

本文基於 Netty 4.1.112.Final , Kafka 3.9.0 版本進行討論 在業務開發的場景中,我們經常會遇到很多定時任務的需求。比如,生成業務報表,週期性對賬,同步數據,訂單支付超時處理等。針對業務場景中定時任務邏輯複雜,執行時間長的特點,市面上已經有很多成熟的任務調度中間件可供我們選擇。比如:ElasticJob , XXL-JOB , PowerJob 等等。 而在中間件的場

bin_60080bc5146e1 Avatar

@bin_60080bc5146e1

Nickname bin的技術小屋

@xuxueli

XXL-RPC v1.8.1 | RPC服務框架

Release Notes 1、【安全】序列化安全性增強,默認開啓package安全空間機制; 2、【擴展】序列化擴展性增強,支持自定義序列化package白名單; 3、【優化】序列化類型主動檢測,提升問題定位效率; 4、【能力】服務註冊發現實效性提升,優化long-polling邏輯; 5、【擴展】模塊 xxl-rpc-netty-shade 獨立拆分,與Core模塊解耦; 6、【

xuxueli Avatar

@xuxueli

Nickname xuxueli