Netty sample
来源:互联网 发布:java实现日志服务 编辑:程序博客网 时间:2024/05/23 01:17
Echo
============= Echo client handler
channelActive
channelRead ,1446776210948
channelReadComplete
channelRead ,1446776210949
channelReadComplete
channelRead ,1446776210949
channelReadComplete
channelRead ,1446776210950
channelReadComplete
channelRead ,1446776210950
channelReadComplete
channelRead ,1446776210948
channelReadComplete
channelRead ,1446776210949
channelReadComplete
channelRead ,1446776210949
channelReadComplete
channelRead ,1446776210950
channelReadComplete
channelRead ,1446776210950
channelReadComplete
======= telnet
EchoServer wangliang$ telnet 127.0.0.1 8007
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
haha
haha
yes
yes
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
haha
haha
yes
yes
======= 修改让一个telent输入的内容在其他telnet中都回显
做法一:
用数组保存 ctx, 在read时调用所有的ctx.write
@Sharablepublic class EchoServerHandler extends ChannelHandlerAdapter { static ArrayList<ChannelHandlerContext> ctxlist = new ArrayList<ChannelHandlerContext>(); private void read(Object msg) { for(ChannelHandlerContext ctx : ctxlist) { ctx.write(msg); } } @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { super.channelActive(ctx); ctxlist.add(ctx); System.out.println("channelActive ," + ctx); } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) {// System.out.println("channelRead"); ctx.write(msg); read(msg); }
从报错可以看到,flash后会去做release byteBuf.与前文描述相符。
Nov 06, 2015 11:31:24 AM io.netty.util.ReferenceCountUtil safeRelease
警告: Failed to release a message: SimpleLeakAwareByteBuf(PooledUnsafeDirectByteBuf(freed))
io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
at io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:111)
at io.netty.buffer.WrappedByteBuf.release(WrappedByteBuf.java:832)
at io.netty.buffer.SimpleLeakAwareByteBuf.release(SimpleLeakAwareByteBuf.java:44)
at io.netty.util.ReferenceCountUtil.release(ReferenceCountUtil.java:84)
at io.netty.util.ReferenceCountUtil.safeRelease(ReferenceCountUtil.java:109)
at io.netty.channel.ChannelOutboundBuffer.remove(ChannelOutboundBuffer.java:258)
at io.netty.channel.ChannelOutboundBuffer.removeBytes(ChannelOutboundBuffer.java:334)
at io.netty.channel.socket.nio.NioSocketChannel.doWrite(NioSocketChannel.java:316)
at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:837)
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:298)
at io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:806)
at io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1283)
at io.netty.channel.ChannelHandlerInvokerUtil.invokeFlushNow(ChannelHandlerInvokerUtil.java:166)
at io.netty.channel.DefaultChannelHandlerInvoker.invokeFlush(DefaultChannelHandlerInvoker.java:355)
at io.netty.channel.PausableChannelEventExecutor.invokeFlush(PausableChannelEventExecutor.java:46)
at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:546)
at io.netty.example.echo.EchoServerHandler.channelReadComplete(EchoServerHandler.java:55)
at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadCompleteNow(ChannelHandlerInvokerUtil.java:92)
at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelReadComplete(DefaultChannelHandlerInvoker.java:167)
at io.netty.channel.PausableChannelEventExecutor.invokeChannelReadComplete(PausableChannelEventExecutor.java:91)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelReadComplete(AbstractChannelHandlerContext.java:412)
at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:962)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:150)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:514)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:471)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:385)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:351)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
at io.netty.util.internal.chmv8.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1412)
at io.netty.util.internal.chmv8.ForkJoinTask.doExec(ForkJoinTask.java:280)
at io.netty.util.internal.chmv8.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:877)
at io.netty.util.internal.chmv8.ForkJoinPool.scan(ForkJoinPool.java:1706)
at io.netty.util.internal.chmv8.ForkJoinPool.runWorker(ForkJoinPool.java:1661)
at io.netty.util.internal.chmv8.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:126)
警告: Failed to release a message: SimpleLeakAwareByteBuf(PooledUnsafeDirectByteBuf(freed))
io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
at io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:111)
at io.netty.buffer.WrappedByteBuf.release(WrappedByteBuf.java:832)
at io.netty.buffer.SimpleLeakAwareByteBuf.release(SimpleLeakAwareByteBuf.java:44)
at io.netty.util.ReferenceCountUtil.release(ReferenceCountUtil.java:84)
at io.netty.util.ReferenceCountUtil.safeRelease(ReferenceCountUtil.java:109)
at io.netty.channel.ChannelOutboundBuffer.remove(ChannelOutboundBuffer.java:258)
at io.netty.channel.ChannelOutboundBuffer.removeBytes(ChannelOutboundBuffer.java:334)
at io.netty.channel.socket.nio.NioSocketChannel.doWrite(NioSocketChannel.java:316)
at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:837)
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:298)
at io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:806)
at io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1283)
at io.netty.channel.ChannelHandlerInvokerUtil.invokeFlushNow(ChannelHandlerInvokerUtil.java:166)
at io.netty.channel.DefaultChannelHandlerInvoker.invokeFlush(DefaultChannelHandlerInvoker.java:355)
at io.netty.channel.PausableChannelEventExecutor.invokeFlush(PausableChannelEventExecutor.java:46)
at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:546)
at io.netty.example.echo.EchoServerHandler.channelReadComplete(EchoServerHandler.java:55)
at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadCompleteNow(ChannelHandlerInvokerUtil.java:92)
at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelReadComplete(DefaultChannelHandlerInvoker.java:167)
at io.netty.channel.PausableChannelEventExecutor.invokeChannelReadComplete(PausableChannelEventExecutor.java:91)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelReadComplete(AbstractChannelHandlerContext.java:412)
at io.netty.channel.DefaultChannelPipeline.fireChannelReadComplete(DefaultChannelPipeline.java:962)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:150)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:514)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:471)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:385)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:351)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
at io.netty.util.internal.chmv8.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1412)
at io.netty.util.internal.chmv8.ForkJoinTask.doExec(ForkJoinTask.java:280)
at io.netty.util.internal.chmv8.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:877)
at io.netty.util.internal.chmv8.ForkJoinPool.scan(ForkJoinPool.java:1706)
at io.netty.util.internal.chmv8.ForkJoinPool.runWorker(ForkJoinPool.java:1661)
at io.netty.util.internal.chmv8.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:126)
0 0
- Netty sample
- sample
- !!!sample
- sample
- Netty
- Netty
- Netty
- Netty
- Netty
- Netty
- netty
- netty
- netty
- Netty
- Netty
- Netty
- Netty
- netty
- 数据的集合运算----几个单表查询的关系(高性能查询)
- mysql---写存储过程需要的知识点
- struts2中<s:if>标签判断session问题
- JavaScript学习(一):词法结构
- BaseAdapter
- Netty sample
- 经济学故事-卖猴子
- Layout_weight属性解析
- 解决eclipse中出现Resource is out of sync with the file system问题
- C#中读取枚举值的描述属性
- pets vs cattle
- xen虚拟机时间同步
- HTTP_REFERER的用法及伪造
- APP 完整性校验