admin 管理员组

文章数量: 887021


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; } }


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

更多相关文章

Win10及Office2019状态查询和问题处理

2月前

一、Win10状态查询 方法①: 1、在开始菜单栏Windows系统中右键单击命令提示符,选择管理员模式进入 2、复制 slmgr.vbs -xpr 到命令行运行 方法②:

打印机无法打印显示服务器错误怎么办,打印机显示错误怎么办 打印机状态错误是怎么回事...

2月前

1、首先要检查打印机是否处于联机状态,如果打印机没有联机是无法进行工作的,检查打印机与电脑之间的连线是否正确。 2、然后在开始中找到设备和打印机,在弹出窗口右键单击空白处&a

玩转GIT系列之【如何恢复windows系统下git的状态图标显示】

2月前

装完TortoiseGit之后,按理说会在所有git仓库的目录图标处显示出对应的叠加小图标,如下图所示。 根据这些图标的内容,可以非常明显的分辨出各个目录、文件当前的状态&

C语言获取windows操作系统信息

2月前

欢迎转载,但转载时请注明本博客出处:http:blog.csdnpingdarticledetails22396517,谢谢! 这里也只是一个功能函数而已,话不多说,直接上代码: 获取操作系统名字,如windows 7

windows下WPS导致打开程序为未响应状态

2月前

现象:windows启动后,打开了几个程序,之后再打开新的程序发现,都是未响应状态。 处理过程:想先用360杀下毒&#xf

ASUS ROG幻16Air笔记本电脑Win11系统恢复包:重拾出厂状态的利器

2月前

ASUS ROG幻16Air笔记本电脑Win11系统恢复包:重拾出厂状态的利器 ASUS华硕ROG幻16Air笔记本电脑GU605M原装出厂Win11系统工厂包下载带有ASUSRecovery一键重置还原项目地

TPlink-XDR6088路由器Docker安装netdata实现监控设备信息并接入Homeassistant

2月前

夏天到了,路由器明显变热,想监控下主路由的温度,奈何TP的app只有速度显示,而且TP的路由开放性一直不强,不过偶然看到这篇文章&

esp8266 读取 php信息,esp8266接收到来自手机端的字符串信息如何实现获取和判断来控制单片机的模块?...

2月前

1、51单片机实现由串口调试助手发送字符串控制继电器的开关可以说明你单片机程序串口收发功能是正常的,但是esp8266与51单片机的通信是有格式要求的,你的单片机程序要修改一下。 2、下面是P2口

黑客进行攻击中最重要的环节“信息收集”

2月前

💕💕💕 博主昵称:摆烂阳💕💕💕 🥰博主主页跳转链接

WIFI信号状态信息 CSI 深度学习篇之CNN(Matlab)

2月前

本系列先前的博客中,从硬件配置开始,收集了Wifi信号数据并进行了一系列处理,最终将信号数据转化为图像数据,也即将信号识别问题转变为图像分类问题&

计算机检查到的无线路由信息,如何将计算机连接到无线路由器_计算机的基本知识_IT 计算机_信息...

2月前

如何将笔记本电脑连接至无线路由器1.我的笔记本电脑是ASUS EPC笔记本电脑. 我不知道如何连接到无线路由器. 我不知道我的笔记本电脑是否有无线网卡. 对xp的满意答复: 如果您确定无法在已连接到公用网络的路由器上访问Internet&a

inter(R)9462设备状态显示错误代码(56)解决方法

2月前

问题一般出现原因:电脑曾进行过“VMware”下载或卸载,或者有什么改动,造成出现错误56 错误产生后果:电脑无法连接网络,在电

编程常见报错信息及解决方案汇总

2月前

编程常见报错信息及解决方案汇总 Java(jdk) Java API java8帮助文档 jdk1.8.0_212 全平台下载 官网下载JDK1.7的方法和步骤 详解处理Java中的大对象的方法 Java最新JDK和API下载

固态硬盘健康状态解析

2月前

固态硬盘(SSD)的健康状态监测是评估其性能和寿命的重要手段。以下是一些关键指标和术语,用于解读SSD的健康状态: 1. 使用寿命&#xff0

《LabVIEW ZYNQ FPGA宝典》第6章>>实验5:PS(ARM)端Linux RT读取PL端FPGA引脚电平(读取捕捉PL端FPGA相连的按键状态)

2月前

1、实验内容 从本节实验开始,我们将向大家讲解如何使用LabVIEW开发同时ZYNQ芯片里面的PS端ARM和PL端FPGA程序,早在前面第五章入门实验里面,我们就已经向大家介

浏览器基本响应码大全(HTTP状态码)

2月前

响应码 是用以表示网页服务器超文本传输协议响应状态的3位数字代码,(也叫HTTP状态码)。响应码对于服务器来说很重要,它直接反应了浏览器相应的结果&am

浏览器----搜索技巧(快速获得准确信息)

2月前

【超级搜索技术,普通人变强的唯一外挂 | 全套宝藏实操秘技】 https:www.bilibilivideoBV1yw411F7J1?share_sourcecopy_web&vd_sourcebf4

JavaScript 通过UserAgent获取用户设备信息(浏览器信息、操作系统信息)

2月前

User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏

计算机windows7未能启动,Win7电脑启动时出现“windows未能启动”状态0xc000000e如何解决...

2月前

1.插入windows安装光盘并重新启动计算机。 2.选择语言设置,然后单击下一步。 3.单“修复计算机”。 如果没有此光盘,请您丐系统管理员或计算机制造商联系,以获得帮助。

如何保留和还原 Windows Phone 的应用状态

1月前

如何保留和还原 Windows Phone 的应用状态 其他版本 此主题尚未评级 - 评价此主题 20121114 适用于: Windows Phone 8 | Windows Phone OS 7.1   Win

发表评论

全部评论 0
暂无评论