1)AttributeMap这是是绑定在Channel或者ChannelHandlerContext上的一个附件,相当于依附在这两个对象上的寄生虫一样,相当于附件一样,如图所示:
这个图还算比较形象地描述了AttributeMap的作用,我们知道每一个ChannelHandlerContext都是ChannelHandler和ChannelPipeline之间连接的桥梁,每一个ChannelHandlerContext都有属于自己的上下文,也就说每一个ChannelHandlerContext上如果有AttributeMap都是绑定上下文的,也就说如果A的ChannelHandlerContext中的AttributeMap,B的ChannelHandlerContext是无法读取到的
但是Channel上的AttributeMap就是大家共享的,每一个ChannelHandler都能获取到
我们再看看AttributeMap的结构:
可以看出这个是线程安全的,所以我们可以放心使用,再看看AttributeMap的结构,其实和Map的格式很像,key是AttributeKey,value是Attribute,我们可以根据AttributeKey找到对应的Attribute,并且我们可以指定Attribute的类型T:
下面截取了两种AttributeKey的用法的部分代码.
private AttributeKey<String> key = AttributeKey.valueOf("Id"); @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { Attribute<String> channelAttr = ctx.channel().attr(key); Attribute<String> contextAttr = ctx.attr(key); //基于channel的属性 if(channelAttr.get() == null){ channelAttr.set("1"); }else{ System.out.println("channel key :"+channelAttr.get()); } //基于context的属性 if(contextAttr.get() == null){ contextAttr.set("1"); }else{ System.out.println("contextAttr key :"+contextAttr.get()); } ByteBuf buf = (ByteBuf) msg; byte[] req = new byte[buf.readableBytes()]; buf.readBytes(req); String body = new String(req,"UTF-8").substring(0, req.length-System.getProperty("line.separator").length()); System.out.println("server channelRead...; received:" + body + ";the counter is" + counter++); String currentTime = "QUERY TIME ORDDER".equalsIgnoreCase(body) ?new Date(System.currentTimeMillis()).toString():"BAD ORDER"; ByteBuf resp = Unpooled.copiedBuffer(currentTime.getBytes()); ctx.writeAndFlush(resp); }
相关推荐
《Netty进阶之路-跟着案例学Netty》是由知名技术专家李林峰撰写的一本专为Java开发者深入理解Netty框架而准备的书籍。这本书旨在通过实例教学,帮助读者全面掌握Netty的核心特性和实战技巧,提升网络编程的能力。 ...
它的本质是为了简化高性能网络应用程序的开发,它可以快速轻松地开发诸如协议服务器和客户端之类的网络应用程序。Netty极大地简化了网络编程流程,如TCP和UDP套接字服务器,它常用于游戏、大数据、企业软件、通信等...
Java进阶技术-netty进阶之路
Netty源码剖析与应用
在 Netty 中,多线程的应用是其处理高并发、高性能的关键因素之一。下面我们将深入探讨 Netty 中的多线程并发应用。 1. **线程模型** Netty 采用了 Boss-Worker 线程模型,它由两部分组成:Boss 线程和 Worker ...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨如何利用 Netty 快速开发 Web 应用,以及它在企业级应用中的重要性。 一、Netty ...
Netty进阶之路 跟着案例学Netty 整本书无密码,Netty进阶之路 跟着案例学Netty
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。它是 Java 平台上的一个开源项目,广泛应用于分布式系统、云计算平台、游戏服务器、聊天应用以及大数据传输等...
《Netty进阶之路:跟着案例学Netty》中的案例涵盖了Netty的启动和停止、内存、并发多线程、性能、可靠性、安全等方面,囊括了Netty绝大多数常用的功能及容易让人犯错的地方。在案例的分析过程中,还穿插讲解了Netty...
Netty在Android开发中的应用实战系列(一)——— 搭建服务端与客户端:https://azhon.blog.csdn.net/article/details/100569489 Netty在Android开发中的应用实战系列(二)——— Encoder | Decoder | Handler 的...
《跟闪电侠学Netty:Netty即时聊天实战与底层原理》是一本深入浅出的Netty技术指南,旨在帮助读者掌握Netty框架,并利用它实现即时聊天应用,同时理解其底层工作原理。Netty是Java领域的一款高性能、异步事件驱动的...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨如何利用 Netty 4.0.23 版本来实现文件的传输,这包括客户端和服务器端的交互过程。...
### Netty原理与应用 #### 一、Netty概述及应用场景 Netty是一个高性能、轻量级的开源网络通信框架,它支持多种协议,如TCP、UDP、HTTP等,并且可以用于开发高度定制化的网络应用。Netty采用了异步、事件驱动的...
《Netty实战》这本书是针对Java网络编程框架Netty的一本深入实践教程,旨在帮助读者掌握Netty的核心特性和实际应用。Netty是一款高性能、异步事件驱动的网络应用程序框架,广泛应用于各种分布式系统、微服务架构以及...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨Netty的基本概念,通过“Hello World”范例来理解其工作原理。 首先,让我们理解...
Netty在物联网(IoT)和即时通讯(IM)项目中的应用主要体现在其高效、灵活的网络通信框架特性上。SpringBoot与MQTT 3.1.1的结合,为服务器端开发提供了便利,而Netty作为底层通信库,极大地提升了系统性能。 首先...
Java应用程序中的Netty框架是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty广泛应用于分布式系统、云计算、大数据处理等领域,它的核心特性包括非阻塞I/O、...
Netty应用中文详解