Netty ChannelHandler Hot Plug 热插拔

17 篇文章 0 订阅
17 篇文章 4 订阅

2016年拍摄于台湾省垦丁帆船石,第一张海面雾化使用了减光镜加长时间曝光。

                                                                                        微信公众号

                                              王皓的GitHub:https://github.com/TenaciousDWang      

     

        今天我们继续来学习关于ChannelHandler的一些使用技巧,我们以登陆为例。

        根据我们现在的逻辑处理链,如果客户端没有发来登陆请求数据包,而是发送了其他的数据包,我们后面的逻辑处理器还是能够继续处理,老办法是每一个逻辑处理器里面开头都需要添加判断是否已经登录,但是太浪费资源,也会影响性能,我们可以将这个逻辑抽取出来,写一个AuthHandler挂在登陆逻辑处理器后面,如果判断当前连接没有登陆,则关闭连接。

 

 

        然后我们把AuthHandler放在相应的位置。

 

 

        到这里我们解决了第一个问题,但是我们又发现了一个新的问题,就是这个逻辑处理器处于一整条逻辑处理链当中,相当于每次客户端来请求时,都要经过这个身份验证处理器拦截并处理数据,一个客户发送100次信息,就要调用100次该逻辑处理器,这样也会造成资源的浪费与性能上的损耗,怎么来解决这个问题呢,Netty贴心的为我们准备了ChannelHandler的热插拔功能,可以来完美解决这个问题,即当该连接已经标识为已登录,那么我们可以动态移除这个身份校验逻辑处理器,以后校验登陆后,以后每次发来数据包都可以免去调用该逻辑处理器。

 

 

        对于重复调用的逻辑,我们可以抽取出一个Handler来处理,对于调用一次之后无需再次调用的逻辑,我们可以使用ChannelHandler的热插拔功能来动态移除,来提高性能,和避免资源浪费。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Exception caught when during method invocation. request:net.risesoft.rpc.itemAdmin.DocumentManager.edit4Position(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String) requestId=1771270236171928205 java.lang.reflect.InvocationTargetException: null at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.weibo.api.motan.rpc.DefaultProvider.invoke(DefaultProvider.java:64) at com.weibo.api.motan.rpc.AbstractProvider.call(AbstractProvider.java:52) at com.weibo.api.motan.transport.ProviderMessageRouter.call(ProviderMessageRouter.java:98) at com.weibo.api.motan.transport.ProviderProtectedMessageRouter.call(ProviderProtectedMessageRouter.java:75) at com.weibo.api.motan.transport.ProviderMessageRouter.handle(ProviderMessageRouter.java:93) at com.weibo.api.motan.transport.support.DefaultRpcHeartbeatFactory$HeartMessageHandleWrapper.handle(DefaultRpcHeartbeatFactory.java:98) at com.weibo.api.motan.transport.netty4.NettyChannelHandler.processRequest(NettyChannelHandler.java:155) at com.weibo.api.motan.transport.netty4.NettyChannelHandler.processMessage(NettyChannelHandler.java:133) at com.weibo.api.motan.transport.netty4.NettyChannelHandler.access$000(NettyChannelHandler.java:32) at com.weibo.api.motan.transport.netty4.NettyChannelHandler$1.run(NettyChannelHandler.java:73) at java.util.concurrent.ThreadPoolExecutor.runWorker(Threa是哪里的问题
07-14

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值