欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Netty實現(xiàn)WebSocket的常用處理器及區(qū)別解析

 更新時間:2025年02月13日 11:24:35   作者:初夏の貓  
文章介紹了Netty中的ChannelInboundHandlerAdapter和SimpleChannelInboundHandler處理器,以及WebSocket的幾種常見幀類型,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧

ChannelInboundHandlerAdapter 和 SimpleChannelInboundHandler 都是 Netty 提供的處理器基類。

它們之間的主要區(qū)別:

ChannelInboundHandlerAdapter
ChannelInboundHandlerAdapter 是一個通用的處理器基類,繼承自 ChannelInboundHandler,用于處理 入站消息(即從客戶端到服務端的消息)。
它不做任何具體的消息類型限制,因此適用于處理各種類型的入站消息。
你可以重寫 channelRead 方法來處理不同類型的消息,或者重寫 exceptionCaught 等方法處理異常。
特點:
通用:沒有指定消息類型,你可以在 channelRead 方法中處理任何類型的入站消息。
靈活:你需要手動判斷消息的類型,進行相應的處理。
適用場景:適用于處理多種不同類型的消息,或者當你希望處理多個類型的消息時。

public class WebSocketServerHandler extends ChannelInboundHandlerAdapter {
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        if (msg instanceof TextWebSocketFrame) {
            // 處理 TextWebSocketFrame 消息
            String request = ((TextWebSocketFrame) msg).text();
            ctx.channel().writeAndFlush(new TextWebSocketFrame("Hello, " + request));
        } else {
            super.channelRead(ctx, msg);  // 轉發(fā)其他消息
        }
    }
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        cause.printStackTrace();
        ctx.close();
    }
}

SimpleChannelInboundHandler
SimpleChannelInboundHandler 是 ChannelInboundHandlerAdapter 的一個子類,它專門用于處理某一特定類型的入站消息。你需要在創(chuàng)建 SimpleChannelInboundHandler 時指定消息類型 T(如 TextWebSocketFrame、ByteBuf 等)。
它在處理完每個消息后會自動釋放該消息,因此避免了手動管理消息的生命周期(比如調用 ReferenceCountUtil.release)。
如果消息類型不匹配,它會拋出異常,這使得它更適合處理單一類型的消息,簡化了類型檢查。
特點:
泛型:SimpleChannelInboundHandler 強制指定一個消息類型,這樣可以避免手動類型檢查,減少代碼出錯的可能性。
自動釋放消息:在處理完消息后,SimpleChannelInboundHandler 會自動釋放消息,因此你不需要關心資源的回收。
簡潔:適合處理特定類型的消息,代碼更簡潔、可讀性更好。

public class WebSocketServerHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> {
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception {
        // 直接處理 TextWebSocketFrame 消息,不需要類型檢查
        String request = msg.text();
        ctx.channel().writeAndFlush(new TextWebSocketFrame("Hello, " + request));
    }
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        cause.printStackTrace();
        ctx.close();
    }
}

WebSocket 幀類型

1.Text WebSocket Frame (文本幀)
用于傳輸文本數(shù)據(jù),通常是 UTF-8 編碼的字符串。
這類幀對應于 TextWebSocketFrame 類。
TextWebSocketFrame 是一個 單一類型的消息框架,在 Netty 中用于表示 WebSocket 連接中傳輸?shù)奈谋鞠ⅰ?br />2.Binary WebSocket Frame (二進制幀)
用于傳輸二進制數(shù)據(jù)(如文件、圖片、視頻等)。
對應于 BinaryWebSocketFrame 類。
這種類型的 WebSocket 幀通常是用于傳輸二進制數(shù)據(jù)。
3.Close WebSocket Frame (關閉幀)
用于關閉 WebSocket 連接的幀。
對應于 CloseWebSocketFrame 類。
發(fā)送此類型的幀可以通知對方關閉連接。
4.Ping WebSocket Frame (Ping 幀)
用于測試 WebSocket 連接是否正常可用(心跳)。
對應于 PingWebSocketFrame 類。
一般由客戶端或服務器發(fā)送,收到 Ping 后,另一方通常會發(fā)送一個 Pong 幀作為響應。
5.Pong WebSocket Frame (Pong 幀)
用于回應 Ping 幀。
對應于 PongWebSocketFrame 類。

TextWebSocketFrame 的作用
TextWebSocketFrame 是專門用于處理 文本消息 的 WebSocket 幀,它繼承了 WebSocketFrame,并封裝了文本內容。在實際的 WebSocket 應用中,客戶端和服務器通常會通過發(fā)送和接收 TextWebSocketFrame 來交換信息,通常這些信息都是 UTF-8 編碼的文本。

到此這篇關于基于Netty實現(xiàn)的WebSocket的常用處理器的文章就介紹到這了,更多相關Netty WebSocket處理器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用jekins自動構建部署java maven項目的方法步驟

    使用jekins自動構建部署java maven項目的方法步驟

    這篇文章主要介紹了使用jekins自動構建部署java maven項目的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 創(chuàng)建SpringBoot項目的全過程

    創(chuàng)建SpringBoot項目的全過程

    文章介紹了如何在IDEA專業(yè)版中創(chuàng)建SpringBoot項目,并通過一個簡單的示例展示了如何使用SpringBoot輸出"hello,Springboot"
    2025-03-03
  • Java的Socket網(wǎng)絡編程基礎知識入門教程

    Java的Socket網(wǎng)絡編程基礎知識入門教程

    這篇文章主要介紹了Java的Socket網(wǎng)絡編程基礎知識入門教程,包括基于TCP/IP和UDP協(xié)議的簡單實例程序講解,需要的朋友可以參考下
    2016-01-01
  • Mybatis如何按順序查詢出對應的數(shù)據(jù)字段

    Mybatis如何按順序查詢出對應的數(shù)據(jù)字段

    這篇文章主要介紹了Mybatis如何按順序查詢出對應的數(shù)據(jù)字段,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java 多線程學習詳細總結

    Java 多線程學習詳細總結

    本文主要介紹 Java 多線程的知識資料,這里整理了詳細的多線程內容,及簡單實現(xiàn)代碼,有需要的朋友可以參考下
    2016-09-09
  • 關于spring中事務的傳播機制

    關于spring中事務的傳播機制

    這篇文章主要介紹了關于spring中事務的傳播機制,所謂事務傳播機制,也就是在事務在多個方法的調用中是如何傳遞的,是重新創(chuàng)建事務還是使用父方法的事務,需要的朋友可以參考下
    2023-05-05
  • spring-boot-maven-plugin:打包時排除provided依賴問題

    spring-boot-maven-plugin:打包時排除provided依賴問題

    這篇文章主要介紹了spring-boot-maven-plugin:打包時排除provided依賴問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Spring TaskScheduler使用實例解析

    Spring TaskScheduler使用實例解析

    這篇文章主要介紹了Spring TaskScheduler使用實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • 詳解springboot-mysql-pagehelper分頁插件集成

    詳解springboot-mysql-pagehelper分頁插件集成

    這篇文章主要介紹了springboot-mysql-pagehelper分頁插件集成,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式)

    SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式)

    這篇文章主要介紹了SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評論