netty3升netty4一失眼成千古恨
老项目是netty3的,本来想直接改到netty5,但是netty5居然是只支持jdk1.7,很奇怪jdk1.6和jdk1.8都不行..为了兼容jdk1.6加上netty4本来和netty5就差别不大,最后上的netty4.
先期看了一些netty3升netty4的经验总结,然后开始动工.改完后运行一下,发现2个客户端连接,只有1个工作正常,另一个在建立连接的时候直接就阻塞到建立连接这里:
channel = this.lastWriteFuture.awaitUninterruptibly().channel();
建立连接阶段直接一直阻塞,当时我就有点晕啊..死锁?第一印象,这项目线程无数,理了一遍又一遍真是一点头绪没有.随便写个简单demo型的客户端连接一下,一切正常,服务端没有任何问题.
对比其中能正常建立连接的客户端代码,没发现什么区别啊(实际上此时如果头脑快的话,应该已经能定位问题所在了),没解了,被这问题 绊住1天多,只好用最笨的办法排除了,从demo代码向项目中的真实代码一点一点累加,看出在哪部分..经过n长时间终于确认到这个客户端的handler部分有问题..这handler继承了一层,父子类看了一遍又一遍,也没看出来特别的地方.没招继续用最笨的方法,一段代码一段代码注释掉,看哪部分影响..就这样n久之后发现问题代码段,一看还没觉得有什么问题,点了一下看了一下文档说明才发觉问题所在,感觉这2天又虚度了..
//netty3的方法
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)
throws Exception {
xxxx;
} //netty4我改成的方法
@Override
public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise future)
throws Exception {
xxxx;
}
这个当时替换的时候直接当做一个方法处理了...生成新的重写方法的时候,因为名字很像就直接也点选生成了,然后就把原来的channelConnected方法中的实现写到这个方法中了.这个其实如果它要是抛异常或是出错应该马上就能发现这里写错了..但是点选这个connect方法能看到文档如下解释:
Calls ChannelHandlerContext.connect(SocketAddress, SocketAddress, ChannelPromise) to forward to the next ChannelOutboundHandler in the ChannelPipeline. Sub-classes may override this method to change behavior.
//简单说程序在管道中多个ChannelOutBoundHandler中传递的时候,可以用这个方法进行一些自定义操作.
然后我把这个方法写成别的了,而且并没有调用connect(ctx, remoteAddress, localAddress, future)方法导致这个方法功能直接废了,没法在管道中传递了.现象就是没有任何异常和报错的这个连接走到这里就无返回值的结束了,而建立连接那头还在无限期的等待连接建立...
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
xxxx;
}
改成以上的正常代码后,功能恢复正常,连接可以正常建立...
netty3升netty4一失眼成千古恨的更多相关文章
- 蓝萝卜blu netty3升netty4
老项目是netty3的,本来想直接改到netty5,但是netty5居然是只支持jdk1.7,很奇怪jdk1.6和jdk1.8都不行..为了兼容jdk1.6加上netty4本来和netty5就差别不大 ...
- 使用Netty3或Netty4发布Http协议服务
现在是2018年1月11日18:12分,已经是下班时间了,小Alan今天给大家简单的介绍一下Netty,让大家以后在使用到Netty的时候能够有一定的了解和基础,这样深入学习Netty以及以后灵活应用 ...
- CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放 《CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放》来自张戈博客
张戈博客很久以前分享过一个CC攻击的防御脚本,写得不怎么样,不过被51CTO意外转载了.博客从此走上了经常被人拿来练手的不归之路. 当然,还是有不少朋友在生产环境使用,并且会留言询问相关问题.根据这些 ...
- WiFi流量劫持—— JS脚本缓存投毒
在上一篇<WiFi流量劫持—— 浏览任意页面即可中毒>构思了一个时光机原型,让我们的脚本通过HTTP缓存机制,在未来的某个时刻被执行,因此我们可以实现超大范围的入侵了. 基于此原理,我们用 ...
- POJ2112Optimal Milking(二分法+floyd最短+网络流量)
职务地址:http://poj.org/problem?id=2112 近期忙着预习课本备考,没怎么刷题.(我是真的有在好好看书..)不敲题还是手痒痒.立即就邀请赛了,还是每晚睡觉前都拿来刷题吧.白天 ...
- Hanoi Factorys
题面 思路 这道题看似难的一匹,实际上也难的一批还好,甚至n^2 DP都有50分呢. 原谅我一失手成千古恨. 50分思路 就是sort后根据条件DP if (LIS[i].b>LIS[j].a) ...
- ansible来了
番一.OP酱的自白 自从入了贵圈,每天需要强大的内心来维护混乱的线上,每天都是用浆糊一样的shell /python在糊墙补窟窿啊,感觉每天都是在和if else打交道啊,每次花牛鼻子劲写的 ...
- 红楼梦人物关系图,一代大师成绝响,下回分解待何人,kindle读书摘要
人物关系图: https://www.cnblogs.com/images/cnblogs_com/elesos/1120632/o_2033091006.jpg 红楼梦 (古典名著普及文库) ( ...
- 【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战
前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同 ...
随机推荐
- 实用的60个CSS代码片段
1.垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,可以很优雅的解决这个困惑: .verticalcenter{ position: re ...
- WebApi设置SessionState为Required
public override void Init() { //在注册管道事件中 require session state //只能在引发“HttpApplication.AcquireReques ...
- ios 学习笔记之控件属性
1.文本框 设置密码属性:Secure Text Entry 勾选; 设置文本框带清除属性: Clear Button =Is always visible; 默认是不带清除属性:Never app ...
- MySQL中索引和优化的用法总结
1.什么是数据库中的索引?索引有什么作用? 引入索引的目的是为了加快查询速度.如果数据量很大,大的查询要从硬盘加载数据到内存当中. 2.InnoDB中的索引原理是怎么样的? InnoDB是Mysql的 ...
- MySQL字符串替换与HTML转义
ps:今天遇到一个问题,从数据库读取一个字符串,然后在jsp用EL表达式显示时,因为数据库原始数据是带有HTML标签的,所以显示的时候会把标签直接转换成HTML,但是我想要的是HTML标签字符串,所以 ...
- 【shell 大系】Linux Shell常用技巧
在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...
- java代码实现队列的优化
package com.voole.queun; /** * @Decription 队列 * @author TMAC-J * */ public class Queun { /** * 初始化队列 ...
- Java基础学习总结 -- 多线程的实现
目录: 继承Thread类 start()方法实现多线程的原理 实现Runnable接口 Thread类 与 Runnable接口 的联系与区别 多线程的实现方法: 继承Thread类 实现Runna ...
- 关于腾讯云ubuntu服务器tomcat访问慢问题
在腾讯云上配了个一元的学生云,开始一切正常,直到配置tomcat开始出现各种莫名其妙的问题.最莫名其妙的是tomcat启动了,端口也 正常监听,安全组也放行端口了,然后问题来了. 用浏览器访问tomc ...
- CSS3 Gradient 渐变
转载自:http://www.w3cplus.com/content/css3-gradient CSS3发布很久了,现在在国外的一些页面上常能看到他的身影,这让我羡慕已久,只可惜在国内为了兼容IE, ...