关于Netty在运行时,服务器Http接口无法正常响应(无法正常得到数据)解决方案

临床表现

主要的情况,便是今天在调试Netty的时候,准备利用Http接口来调用 Netty 来实现某种业务需求的开发图中。突然发现,服务器之中的所有Http接口无法正常响应。
启动服务器,运行Netty , 接口输出异常。
关闭服务器,关闭Netty,重启服务器,接口正常输出。
只要Netty一开,就有问题。netty一关,问题再见!!

主要病因

看到这里,屏幕前的你可能也正为这件事发愁,也十分的焦急的想知道问题的方法。因此,我先告诉大家:

解决方案:
打开最后配置与启动Netty的那个Java文件。最特别是这两句:

ChannelFuture = boostrap.bind(socketAddress).sync();
future.channel().closeFuture().sync()
//当然也包括前面还有后面 try ,  finnally 里面语句也算
//PS.不要问我为什么不全复制出来

把上面我所说到的代码,全部放入一个 Thread 内部 ,简单的说,就是让Netty的启动,与我们程序的启动不能再同一个线程内启动。

问题原因:

如果,你耐心的看完上面的信息,你就会知道,问题的主要原因,便是Netty启动之后的导致的线程阻塞
。socket 接收消息会导致线程阻塞,这个大家应该都知道,但是,我们不知道的是sync(),竟然不会帮助我们直接将接受消息的逻辑直接进入异步,这我们还挺蛋疼的。
PS:最重要的是,大家在网上,初学Netty的时候。大家其实都差不多看的都是同样的内容,所以大家都算同门师兄弟,结果师父本身代码有问题,结果把下面的人全拖垮了

最后的话

多一句嘴,大家在写Thread的时候,要注意一点。如果你没有很好让这个netty线程与主线程一起关闭的策略,就最好设置成守护线程。虽然我之前没加,没有看见太大的问题。但是,最好还是保持安全一点的策略。

你可能感兴趣的:(笔记,即时通讯项目,java,netty)