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

  • Post author:
  • Post category:其他




临床表现

主要的情况,便是今天在调试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线程与主线程一起关闭的策略,就最好设置成守护线程。虽然我之前没加,没有看见太大的问题。但是,最好还是保持安全一点的策略。



版权声明:本文为ArroGance_X原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。