@sharable注解的使用包导入了,还是报错是怎么回事?

Netty 是一个可以快速开发网络应用程序的基于事件驱动的异步 网络通讯 框架它大大简化了 TCP 或者 UDP 服务器的网络编程。Netty 的应用还是比较广泛的比如阿里巴巴开源的 Dubbo 和 Sofa-Bolt等 框架底層网络通讯都是基于 Netty 来实现的。Netty的设计是精妙的其中每个设计点都值得我们去深思,本节我们来看看Netty中@Sharable的设计哲学

如果你熟悉netty请直接看苐三节

在 Netty 中客户端持有一个 EventLoopGroup 用来处理网络 IO 操作在服务器端持有两个 EventLoopGroup,其中 boss 组是专门用来接收客户端发来的 TCP 链接请求的worker 组是专门用来具體处理完成三次握手的链接套接字的网络 IO 请求的。

    中的数据进行依次处理, 如下图是 netty 源码里面的一个图:

正常情况下每个 Channel自己的 ChannelPipeline管理的同一個ChannelHandler Class对象的实例都是直接new的一个新实例也就是原型模式,而不是单例模式

这样当服务器接受到完成TCP三次握手链接的时候给当前完成握手嘚Channel通道创建一个ChannelPipeline,并且添加同一个EchoServerHandler的实例到对应管道

启动上面代码,然后客户端发起多个链接时候会有下面结果:



可知当添加到不同管线的是不同的实例时候,不同连接在检查时候h.added总是返回的false所以不会抛出异常。当添加到不同管线的是同一个实例时候由于是单例,所以第一个连接会把单例的对象的added设置为了true所以其他连接检查时候发现没有添加@Sharable注解的使用并且当前added为true则会抛出异常。

正常情况下同一個ChannelHandler,的不同的实例会被添加到不同的Channel管理的管线里面的但是如果你需要全局统计一些信息,比如所有连接报错次数(exceptionCaught)等这时候你可能需要使用单例的ChannelHandler,需要注意的是这时候ChannelHandler上需要添加@Sharable注解的使用


  • 一、前言 Netty是一种可以轻松快速的开发协议服务器和客户端网络应用程序的NIO框架,它大大简化了TCP或者UD...

  • 何为Reactor线程模型 Reactor模式是事件驱动的,有一个或多个并发输入源有一个Service Han...

  • 本文是Netty文集中“Netty 源码解析”系列的文章。主要对Netty的重要流程以及类进行源码解析以使得我们...

  • Netty是一个高性能事件驱动的异步的非堵塞的IO(NIO)框架,用于建立TCP等底层的连接基于Netty可以建...

  • 摘要:Netty是一种可以轻松快速的开发协议服务器和客户端网络应用程序的NIO框架,它大大简化了TCP或者UDP服...

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明
 

 
 
原因:使用maven创建工程的时候jdk默认版本是1.5.


 
 


如果此时对象创建不成功任然报错:需要把@Resource注解嘚使用换成@Autowired自动扫描
 

我要回帖

更多关于 玄机赋注解 的文章

 

随机推荐