admin 管理员组

文章数量: 1086019


2023年12月23日发(作者:curle)

@Override protected void doOpen() throws Throwable{ bootstrap = new ServerBootstrap(); bossGroup = oopGroup(1, "NettyServerBoss"); workerGroup = oopGroup( getUrl().getPositiveParameter(IO_THREADS_KEY, T_IO_THREADS), "NettyServerWorker"); final NettyServerHandler nettyServerHandler = new NettyServerHandler(getUrl(), this); channels = nnels(); (bossGroup, workerGroup) .channel(SocketChannelClass()) .option(_REUSEADDR, ) .childOption(_NODELAY, ) .childOption(TOR, T) .childHandler(new ChannelInitializer() { @Override protected void initChannel(SocketChannel ch) throws Exception { // FIXME: should we use getTimeout()? int idleTimeout = eTimeout(getUrl()); NettyCodecAdapter adapter = new NettyCodecAdapter(getCodec(), getUrl(), ); if (getUrl().getParameter(SSL_ENABLED_KEY, false)) { ne().addLast("negotiation", verHandler(getUrl(), nettyServerHandler)); } ne() //我们看到此处为解码 .addLast("decoder", oder()) //我们看到此处为编码 .addLast("encoder", oder()) .addLast("server-idle-handler", new IdleStateHandler(0, 0, idleTimeout, MILLISECONDS)) .addLast("handler", nettyServerHandler); } }); // bind ChannelFuture channelFuture = (getBindAddress()); interruptibly(); channel = l(); }客户端

final public class NettyCodecAdapter { private final ChannelHandler encoder = new InternalEncoder(); private final ChannelHandler decoder = new InternalDecoder();

public ChannelHandler getEncoder() { return encoder; } public ChannelHandler getDecoder() { return decoder; }

private class InternalDecoder extends ByteToMessageDecoder { @Override protected void decode(ChannelHandlerContext ctx, ByteBuf input, List out) throws Exception { ChannelBuffer message = new NettyBackedChannelBuffer(input); NettyChannel channel = ddChannel(l(), url, handler); // decode object. do { int saveReaderIndex = Index(); Object msg = (channel, message); if (msg == _MORE_INPUT) { Index(saveReaderIndex); break; } else { //is it possible to go here ? if (saveReaderIndex == Index()) { throw new IOException("Decode without read data."); } if (msg != null) { (msg); } } } while (le()); } }}我们先看编码部分

TF(orMessage()); } uffer(); if (out instanceof Cleanable) { ((Cleanable) out).cleanup(); } (); (); //响应的数据包长度 int len = nBytes(); checkPayload(channel, len); 2bytes(len, header, 12); // write Index(savedWriteIndex); ytes(header); // write header. Index(savedWriteIndex + HEADER_LENGTH + len); } catch (Throwable t) { // clear buffer Index(savedWriteIndex); // send error message to Consumer, otherwise, Consumer will wait till timeout. if (!t() && tus() != _RESPONSE) { Response r = new Response((), sion()); tus(_RESPONSE); if (t instanceof ExceedPayloadLimitException) { (sage(), t); try { orMessage(sage()); (r); return; } catch (RemotingException e) { ("Failed to send bad_response info back: " + sage() + ", cause: " + sage(), e); } } else { // FIXME log error message in Codec and handle in caught() of IoHanndler? ("Fail to encode response: " + res + ", send bad_response info instead, cause: " + sage(), t); try { orMessage("Failed to send response: " + res + ", cause: " + ng(t)); (r); return; } catch (RemotingException e) { ("Failed to send bad_response info back: " + res + ", cause: " + sage(), e); } } } // Rethrow exception if (t instanceof IOException) { throw (IOException) t; } else if (t instanceof RuntimeException) { throw (RuntimeException) t; } else if (t instanceof Error) { throw (Error) t; } else { throw new RuntimeException(sage(), t); } } }

// decode response.

如果是响应信息 Response res = new Response(id); if ((flag & FLAG_EVENT) != 0) { //是否是event事件 nt(true); } // get status.

获取响应的状态 byte status = header[3]; tus(status); try { if (status == ) {//如果是 OK状态 Object data; if (t()) { //如果是事件响应 ObjectInput in = alize((), is, proto); data = decodeEventData(channel, in); } else { DecodeableRpcResult result; if (().getParameter(DECODE_IN_IO_THREAD_KEY, DEFAULT_DECODE_IN_IO_THREAD)) { result = new DecodeableRpcResult(channel, res, is, (Invocation) getRequestData(id), proto); (); } else { result = new DecodeableRpcResult(channel, res, new UnsafeByteArrayInputStream(readMessageData(is)), (Invocation) getRequestData(id), proto); } data = result; } ult(data); } else { ObjectInput in = alize((), is, proto); orMessage(F()); } } catch (Throwable t) { //如果不成功,直接设置错误状态,并将error信息返回 if (Enabled()) { ("Decode response failed: " + sage(), t); } tus(_ERROR); orMessage(ng(t)); } return res; } else { // decode request.

如果是请求信息 Request req = new Request(id); sion(tocolVersion()); //tocolVersion() == Dubbo RPC protocol version == 2.0.2 Way((flag & FLAG_TWOWAY) != 0); if ((flag & FLAG_EVENT) != 0) { nt(true); } try { Object data; if (t()) { ObjectInput in = alize((), is, proto); data = decodeEventData(channel, in); } else { DecodeableRpcInvocation inv; if (().getParameter(DECODE_IN_IO_THREAD_KEY, DEFAULT_DECODE_IN_IO_THREAD)) { inv = new DecodeableRpcInvocation(channel, req, is, proto); (); } else { inv = new DecodeableRpcInvocation(channel, req, new UnsafeByteArrayInputStream(readMessageData(is)), proto); }

data = inv; } a(data); } catch (Throwable t) { if (Enabled()) { ("Decode request failed: " + sage(), t); } // bad request ken(true); a(t); } return req; } }


本文标签: 响应 状态 信息 编码 看到

更多相关文章

如何查询Windows server 2019操作系统授权信息

2月前

如何查询Windows server 2019操作系统授权信息 1.点击“开始”—“Windows系统”—“命令提示符”,打开命令提示符。 2.输入“slmgr.vbs -dlv”命令,按回车

如何查看Windows系统的端口号状态及常用命令

2月前

netstat -ano | findstr port例如:netstat -ano | findstr 8080

慧荣sm3281主控小米双接口u盘掉盘重新开片量产方法,适用于文件资源管理器打不开、不读盘、无法格式化,0M容量、量产工具无ISP信息等,由此你可以修复你的U盘并定制信息。

2月前

开端 从一个很好的人哪里获得了一枚小米双接口U盘,满怀欣喜的打开,发现u盘打不开,提示音响个不停。问题 拔下来重新检查了一下,发现外表没啥问题

Win10怎么设置自动关闭显示器进入待机状态的时间

2月前

待机是电脑的一种特殊状态,用户在一定时间不使用电脑的话它就会自动进入待机状态,以减少对电量的浪费。那么windows10进入待机的时间在哪里设置呢?其实电脑待机时间的设置就在电源选项面板上进行&a

关显示器后计算机不休眠状态,win10系统自动关闭显示器而不进入睡眠状态设定的设置步骤...

2月前

win10系统使用久了,好多网友反馈说关于对win10系统自动关闭显示器而不进入睡眠状态设定设置的方法,在使用win10系统的过程中经常不知道如何去对win10系统自动关闭显示器而不进入睡眠状态设

Windows接通电源就开机启动方法,预防断电后无法远程。(BIOS设置电源状态)

2月前

公司晚上断电,然而周末需要远程电脑加班怎么办?没错,就是这么悲催,找了一溜十八开也没找到在操作系统层面的设置可以通电就启动计算机,

浏览器 登录 路由器(网络状态,设备管理,路由设置)

2月前

文章目录 1、打开命令提示符,输入ipconfig,回车2、打开浏览器,输入 默认网关IP地址 192.168.2.13、网络状态4、设备管理5、应用管理6、路由设置6.1

excel文件被写保护怎么解除_u盘被写保护怎么解除_u盘怎么解除写保护状态

2月前

现在有的U盘上会有自带写保护的按钮,如果不小心拨动了,就会对U盘进行写保护,解决的办法很简单直接把按钮拨回来就行。但有的u盘上是没有写保护按钮的,那u盘

清除office多余的激活信息

2月前

前言 之前用kms激活工具激活office2016版本,卸载重装正版office2019之后打开wordExcel产品信息里还残留office2016的激活信息。如何删除多余的激活信息: 一

信息: dwr-invoker: A request has been denied as a potential CSRF attack.

2月前

在写一个JavaWeb项目时,登录页面连续无反应,后台显示 信息: dwr-invoker: A request has been denied as a potential CSRF atta

优盘 计算机管理 脱机,打印机脱机状态怎么解除?九种方法教你

2月前

相信很多人在使用打印机打印时都遇到了打印机脱机,不能打印的时候吧。打印机一般出现脱机是因为USB线没连接好,断网等。打印机脱机了就没法打印,不能正常使用了。那么这一问题该怎么

springboot 获取访问者的ip地址、访问设备信息、城市地址信息

2月前

1.获取访问者的ip地址: 不多说直接上代码,详解见注释 package com.xr.util;import lombok.extern.slf4j.Slf4j;import javax.se

ghost系统导致指定域的名称或安全标识(SID)与该域的信任信息不一致

2月前

Ghost 系统由于SID相同,当登录域时提示:指定域的名称或安全标识(SID)与该域的信任信息不一致。 处理方法:从新封装系统: 1.在windows

打印机提示服务器状态未知,win7打印机提示rpc服务器不可用怎么办

2月前

‍‍ 打印机是办公室必备的设备,最近有的win7 32位系统的用户反馈,在使用打印机打印文件的时候弹出了“图片打印错误”的错误窗口,并提示rpc服务器不可用&#xff

【Java】【系统状态】获取系统信息(包括操作系统、jvm、cpu、内存、硬盘、网络、io等)

1月前

1. 获取系统当前各状态信息

[渝粤教育] 四川师范大学 信息素养:效率提升与终身学习的新引擎 参考 资料

1月前

教育 -信息素养:效率提升与终身学习的新引擎-章节资料考试资料-四川师范大学【】 随堂测试 1、【多选题】如果我想了解Excel中VLOOKUP这个函数的具体用法,可以通过以下哪种渠道获取信息进行

Microsoft Edge浏览器删除账户登录信息

1月前

最近遇到一个小小麻烦,就是想删除Edge浏览器中登陆过的账户,在浏览器用户配置中删除个人资料是没有用的,依然可以一点击账户就一键登上了,不需要输入密码&

如何查看笔记本电脑型号和各种信息

1月前

1.笔记本包装盒或者笔记本机身查看 2.winr输入命令dxdiag或者直接搜索dxdiag3.系统信息中查看

谷歌 chrome浏览器自动进入 paused in debugger状态

17天前

问题:今天用谷歌浏览器进行页面调试,只要按F12,浏览器就会进入paused in debugger状态。而且每次都会自动进入debugger状态。 解决办法&#xf

恢复Ubuntu+Windows10双系统安装前状态及分区还原详细步骤

15天前

1、恢复到安装 Ubuntu 之前的状态,先看看系统属性 2、选择 运行 3、 输入 msinfo32 回车 4、注意查看 BIOS 模式这一栏,UEFI,这里我们以UEFI

发表评论

全部评论 0
暂无评论