刚开始写了个简单的TCP服务端,测试也ok,但发现我用工具连上端口后,断开再连接就报了下面的错误。
2013-03-26 13:54:05,283 WARN - Failed to initialize a channel. Closing: [id: 0x83d224f6, /127.0.0.1:2810 => /127.0.0.1:8080] io.netty.channel.ChannelPipelineException: com.cocoon.test.netty.codec.MessageCodec is not a @Sharable handler, so can't be added or removed multiple times. at io.netty.channel.DefaultChannelPipeline.callBeforeAdd(DefaultChannelPipeline.java:628) at io.netty.channel.DefaultChannelPipeline.addLast0(DefaultChannelPipeline.java:200) at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:173) at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:161) at com.cocoon.test.netty.handler.PipelineFactory.initChannel(PipelineFactory.java:27) at com.cocoon.test.netty.handler.PipelineFactory.initChannel(PipelineFactory.java:1) at io.netty.channel.ChannelInitializer.channelRegistered(ChannelInitializer.java:70) at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRegistered(DefaultChannelHandlerContext.java:673) at io.netty.channel.DefaultChannelHandlerContext.fireChannelRegistered(DefaultChannelHandlerContext.java:659) at io.netty.channel.DefaultChannelPipeline.fireChannelRegistered(DefaultChannelPipeline.java:957) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:608) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$700(AbstractChannel.java:437) at io.netty.channel.AbstractChannel$AbstractUnsafe$5.run(AbstractChannel.java:585) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:328) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:331) at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:109) at java.lang.Thread.run(Thread.java:619)
后来发现需要在报错的handler前面加上@sharable,比如:
@Sharable public class TcpServerHandler extends ChannelInboundMessageHandlerAdapter<String> { private static final Logger logger = Logger.getLogger(TcpServerHandler.class.getName()); @Override public void messageReceived(ChannelHandlerContext ctx, String request) throws Exception { logger.info("Receive:" + request); ChannelFuture future = ctx.write(request); future.addListener(ChannelFutureListener.CLOSE); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { logger.log(Level.WARNING, "Unexpected exception from downstream.", cause); ctx.close(); } }
这样就行了。
相关推荐
Netty4.0全部jar包.开发时候只需要倒入总的哪一个netty4.0.jar就行了 后缀为resources.jar的全部是源码。 简单的代码例子在netty-example-resources.jar里面。
Netty (netty-netty-4.0.56.Final.tar.gz)是一个 NIO 客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化和流线了网络编程,例如 TCP 和 UDP 套接字服务器。 “快速和简单”并...
Netty 框架学习 —— 第一个 Netty 应用(csdn)————程序
NIO socket开发,netty4.0工具包。
描述文档请看我的个人博客:www.mesoftware.cn
Springboot2.0.8集成 netty4 ,使用protobuf作为ping的数据交换,比json更加的小巧,占用数据量更小,可用于任何第三方应用做心跳监控。 已完成功能: - 客户端授权验证(基于protoBuff) - 心跳检测(基于protoBuff) ...
netty4.0 关于buffe
Netty4.0实现http服务,客户端通过http请求,服务器进行业务处理,返回响应,交互采用json格式
netty4.0.45jar包socket和http工具包,公司最近开发一个保险项目,用到socket,经过公司10个以上项目验证,该版本的netty4.0.45相当稳定,可以在生产环境上使用。
NULL 博文链接:https://bijian1013.iteye.com/blog/2340636
Netty4.0.54英文版API文档,与官网中文档内容一致,方便用户在离线环境下,开发Netty
Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序dsf。...netty, 4.0.28, Final, jar包, 含源码
包含javadoc,jar 两个文件夹。 doc中是文档资料。 jar是源码及常用例子,均好源码,好使。
netty4.0 各种应用类型的demo源码 比较全
Netty project - an event-driven asynchronous network application framework http://netty.io/
Netty官方4.0.42版jar包
Netty解决了JDK的很多包括空轮询在内的bug Netty底层对线程,selector做了很多细小的优化,精心设计的reactor线程模型做到非常高效的并发处理 自带各种协议栈让你处理任何一种通用协议都几乎不用亲自动手 Netty社区...
netty 4.0版本
Netty是一个异步事件驱动的网络应用程序框架,主要用于快速开发可维护的高性能协议服务器和客户端。它基于Java NIO进行设计,因此提供了高层次的抽象和简化的API,使得开发者可以更加方便地构建网络应用。 Netty在...
NULL 博文链接:https://bijian1013.iteye.com/blog/2340639