日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java - 使用Netty Demo報(bào)錯(cuò)

瀏覽:180日期:2023-12-24 15:20:14

問題描述

public class TimeServer { public void bind(int port) {try { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workGroup = new NioEventLoopGroup(); ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 1024) .childHandler(new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel arg0) throws Exception { System.out.println('初始化'); arg0.pipeline().addLast(new TimeHandler());} }); ChannelFuture future = b.bind(port).sync(); System.out.println('執(zhí)行這里'); future.channel().closeFuture().sync(); System.out.println('執(zhí)行這里');} catch (InterruptedException e) { e.printStackTrace();} } public static void main(String[] args) {new TimeServer().bind(10000); }}public class TimeHandler extends ChannelInboundHandlerAdapter {@Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {super.channelRead(ctx, msg); ByteBuf buf=(ByteBuf) msg;////byte[] butfs = buf.array();//報(bào)錯(cuò) System.out.println(buf.readableBytes());byte[] butfs = new byte[buf.readableBytes()];buf.readBytes(butfs);System.out.println(new String(butfs,'UTF-8'));System.out.println(msg); }}

客戶端使用的是BIO的模型:

public static void main(String[] args) throws Exception {final int port = 10000;//NioServer server = new NioServer(port);//server.init();/// ========================================================// 接下來(lái)模擬3個(gè)Client并發(fā)訪問服務(wù)器int poolsize = 1;ExecutorService pool = Executors.newFixedThreadPool(poolsize);Collection<Callable> tasks = new ArrayList<Callable>(10);final String clientname = 'clientThread';for (int i = 0; i < poolsize; i++) { final int n = i; // 若每一個(gè)Client都保持使用BIO方式發(fā)送數(shù)據(jù)到Server,并讀取數(shù)據(jù)。 tasks.add(new Callable() {@Overridepublic Object call() throws Exception { Socket socket = new Socket('127.0.0.1', port); final InputStream input = socket.getInputStream(); final OutputStream out = socket.getOutputStream(); final String clientname_n = clientname + '_' + n; // BIO讀取數(shù)據(jù)線程 new Thread(clientname_n + '_read') {@Overridepublic void run() { byte[] bs = new byte[1024]; while (true) {try { Thread.sleep(1000);} catch (InterruptedException e) { e.printStackTrace();}int len = 0;try { while ((len = input.read(bs)) != -1) {System.out.println('Clinet thread ' + Thread.currentThread().getName()+ ' read: ' + new String(bs, 0, len)); }} catch (IOException e) { e.printStackTrace();} }} }.start(); // BIO寫數(shù)據(jù)線程 new Thread(clientname_n + '_write') {@Overridepublic void run() { int a = 0; while (true) {try { Thread.sleep(100);} catch (InterruptedException e) { e.printStackTrace();}String str = Thread.currentThread().getName() + ' hello, ' + a;try { out.write(str.getBytes()); out.flush(); a++;} catch (IOException e) { e.printStackTrace();} }} }.start(); return null;} });}pool.invokeAll((Collection<? extends Callable<Object>>) tasks);//server.go(); }

結(jié)果運(yùn)行的時(shí)候出現(xiàn)了以下錯(cuò)誤:

月 13, 2017 5:52:56 下午 io.netty.channel.DefaultChannelPipeline onUnhandledInboundException警告: An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.io.netty.util.IllegalReferenceCountException: refCnt: 0 at io.netty.buffer.AbstractByteBuf.ensureAccessible(AbstractByteBuf.java:1408) at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1394) at io.netty.buffer.AbstractByteBuf.checkReadableBytes(AbstractByteBuf.java:1383) at io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:850) at io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:858) at test.netty.TimeHandler.channelRead(TimeHandler.java:17) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:624) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:559) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:476) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:438) at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144) at java.lang.Thread.run(Thread.java:745)

請(qǐng)問這是為什么呢?

問題解答

回答1:

在netty4中,對(duì)象的生命周期由引用計(jì)數(shù)器控制,ByteBuf就是如此,每個(gè)對(duì)象的初始化引用計(jì)數(shù)為1,調(diào)用一次release方法,引用計(jì)數(shù)器會(huì)減1,當(dāng)嘗試訪問計(jì)數(shù)器為0的,對(duì)象時(shí),會(huì)拋出IllegalReferenceCountException,正如ensureAccessible的實(shí)現(xiàn),更加詳細(xì)的解釋可以參考官方文檔

AbstractByteBuf.java

protected final void ensureAccessible() {if (refCnt() == 0) { throw new IllegalReferenceCountException(0);} }

注意TZ的TimeHandler類中的 super.channelRead(ctx, msg);這行代碼。追蹤調(diào)用路徑,

private void invokeChannelRead(Object msg) {try { ((ChannelInboundHandler) handler()).channelRead(this, msg);} catch (Throwable t) { notifyHandlerException(t);} }

最終調(diào)用的代碼是:ReferenceCountUtil.release(msg)

public static boolean release(Object msg) {if (msg instanceof ReferenceCounted) { return ((ReferenceCounted) msg).release();}return false; }

也就是每次super.channelRead(ctx, msg);后,ByteBuf就會(huì)調(diào)用release()方法,計(jì)數(shù)器減一,然后在buf.readBytes(butfs);這行代碼就會(huì)校驗(yàn)ensureAccessible(),計(jì)數(shù)器為0,netty認(rèn)為ByteBuf對(duì)象已經(jīng)釋放,就拋出異常。

解決方案:

去掉TimeHandler中這行代碼 super.channelRead(ctx, msg);ByteBuf對(duì)象誰(shuí)處理誰(shuí)釋放。

回答2:

An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.缺少exceptionCaught(),在在server端最后一個(gè)Handler中增加exceptionCaught()

標(biāo)簽: java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品女人| 久久精品观看| 另类国产ts人妖高潮视频| 久久久久久久久久久妇女| 日本а中文在线天堂| 高潮久久久久久久久久久久久久| 精品一区av| 亚洲欧洲高清| 亚洲一级网站| 欧美中文字幕| 一区免费视频| 在线亚洲激情| 亚洲一区二区三区四区电影 | 福利一区在线| 日韩精品电影| 欧美~级网站不卡| 日韩午夜高潮| 中文一区一区三区免费在线观 | 婷婷精品在线| 日本少妇一区二区| 国产精品s色| 国产一区二区精品久| 日本精品黄色| 久久久精品网| 免费在线视频一区| 欧美伊人影院| 久久99偷拍| 欧洲亚洲一区二区三区| 一区在线视频观看| 日本亚洲欧洲无免费码在线| 欧美日韩夜夜| 国产黄大片在线观看| 视频小说一区二区| 日韩中文字幕麻豆| 国产精品视频一区二区三区综合 | 欧美黄页在线免费观看| 伊人久久av| 亚洲欧美视频| 国产欧美午夜| 少妇久久久久| 午夜亚洲福利| www在线观看黄色| 欧美在线亚洲| 国产图片一区| 美女网站视频一区| 美女被久久久| 精品一区av| 尤物精品在线| 91精品美女| 精品国产免费人成网站| 中文亚洲欧美| 欧美成a人片免费观看久久五月天| 日本欧美不卡| 日韩av中文在线观看| 日韩中文字幕高清在线观看| 亚洲天堂免费| 91一区二区三区四区| 男女激情视频一区| 亚洲欧洲美洲av| 日韩成人一级| 国产精品99一区二区| 91成人精品在线| 国精品一区二区三区| 日本特黄久久久高潮| 亚洲成a人片| 青草国产精品| 欧美精品一线| 国产不卡精品| 日韩高清一区| 国产精品7m凸凹视频分类| 欧美黄色一区二区| 蜜桃视频一区二区| 国产精品99一区二区三| 四虎在线精品| 免费毛片在线不卡| 精品伊人久久| 日韩精品亚洲aⅴ在线影院| 欧美日韩中文字幕一区二区三区| 日韩精品亚洲专区| 亚洲免费观看| 香蕉成人av| 欧美国产另类| 日韩精品午夜视频| 模特精品在线| 999精品在线| 精品视频一区二区三区在线观看| 视频在线观看一区二区三区| 精品丝袜在线| 国产成人免费精品| 欧美日韩伊人| 免费黄网站欧美| 极品日韩av| 久久九九99| 四虎成人av| 国产精品sm| 久久超级碰碰| 秋霞影视一区二区三区| 老司机免费视频一区二区三区| 亚洲精品电影| 免费高潮视频95在线观看网站| 欧美伊人影院| 亚洲区欧美区| 亚洲综合中文| 夜夜精品视频| 在线亚洲国产精品网站| 欧美特黄一级大片| 亚洲播播91| 国产粉嫩在线观看| 久久丁香四色| 国产日韩1区| 日韩国产欧美一区二区三区| 爽爽淫人综合网网站| av不卡在线看| 五月综合激情| 婷婷综合网站| 久久在线免费| 99视频精品全部免费在线视频| 国产一区二区三区网| 嫩草伊人久久精品少妇av杨幂| 国产亚洲欧美日韩精品一区二区三区| 日韩精品中文字幕吗一区二区 | 欧美日韩xxxx| 青青草91视频| 欧美日韩一视频区二区| 国产欧美日韩| 国产激情欧美| 韩日一区二区| 日韩精品电影| 免费观看不卡av| 夜久久久久久| 免费看日韩精品| 日本中文字幕一区二区| 日韩国产精品久久久久久亚洲| 日韩精品一区二区三区免费视频| 日韩高清不卡一区| 国产精品红桃| 中文字幕日韩欧美精品高清在线| 蜜桃视频在线观看一区二区| 日韩av一级片| 国产成人黄色| 米奇777超碰欧美日韩亚洲| 免费国产自线拍一欧美视频| 少妇精品在线| 国产精品久久久一区二区| 麻豆精品av| 日韩精品一卡| 日韩中文字幕91| 国产日产精品_国产精品毛片| 国产精品高清一区二区| 高潮久久久久久久久久久久久久| 91精品一区二区三区综合| 日韩精品一区二区三区免费观影 | 日韩中文字幕91| 日韩av电影一区| 国产成人免费精品| 免费av一区| 亚洲毛片在线| 免费一区二区三区在线视频| 成人美女视频| 国产精品腿扒开做爽爽爽挤奶网站| 欧美另类专区| 国产亚洲一卡2卡3卡4卡新区| 97精品97| 午夜在线一区| 国产精品伦一区二区| 中文字幕在线视频久| 伊人精品在线| 你懂的国产精品永久在线| 欧美日韩中文一区二区| 日韩精品一区二区三区中文字幕| 精品视频91| 国产一区成人| 国产精品久久久久久模特| 久久久久欧美精品| 日韩av电影一区| 午夜影院一区| 亚洲精品乱码久久久久久蜜桃麻豆 | 久久精品毛片| 在线亚洲欧美| 美女在线视频一区| 日韩视频免费| 国产精品久久久久久久久免费高清| 999精品色在线播放| 日韩和欧美一区二区| 午夜av成人| 综合欧美亚洲| 国产精品原创| 日本欧美在线| 今天的高清视频免费播放成人| 欧美片网站免费| 国产专区一区| 国产精品videossex久久发布| 欧美在线亚洲综合一区| 麻豆精品蜜桃视频网站| 玖玖玖国产精品| 伊人久久视频| 国产精品hd| 综合欧美亚洲| 激情久久久久久| 福利在线一区|