(十七)处理长时间没响应的请求
发布日期:2021-11-18 17:47:37
浏览次数:9
分类:技术文章
本文共 2641 字,大约阅读时间需要 8 分钟。
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
Networkclient的poll函数:
//处理超时的请求 handleTimedOutRequests(responses, updatedNow);
private void handleTimedOutRequests(Listresponses, long now) { //获取到请求超时的主机。 List nodeIds = this.inFlightRequests.getNodesWithTimedOutRequests(now, this.requestTimeoutMs); for (String nodeId : nodeIds) { // close connection to the node //关闭请求超时的主机的连接 this.selector.close(nodeId); log.debug("Disconnecting from node {} due to request timeout.", nodeId); //我们猜应该是会去修改 连接的状态 processDisconnection(responses, nodeId, now); } // we disconnected, so we should probably refresh our metadata if (nodeIds.size() > 0) metadataUpdater.requestUpdate(); }
其实是不断去查询请求是否超时
public ListgetNodesWithTimedOutRequests(long now, int requestTimeout) { List nodeIds = new LinkedList<>(); for (Map.Entry > requestEntry : requests.entrySet()) { String nodeId = requestEntry.getKey(); Deque deque = requestEntry.getValue(); if (!deque.isEmpty()) { ClientRequest request = deque.peekLast(); long timeSinceSend = now - request.sendTimeMs(); //是否超时,如果有主机超时了 if (timeSinceSend > requestTimeout) //把超时的主机的信息加入到nodeIds里面 nodeIds.add(nodeId); } } return nodeIds; }
对
private void processDisconnection(Listresponses, String nodeId, long now) { //修改连接状态 connectionStates.disconnected(nodeId, now); // for (ClientRequest request : this.inFlightRequests.clearAll(nodeId)) { log.trace("Cancelled request {} due to node {} being disconnected", request, nodeId); if (!metadataUpdater.maybeHandleDisconnection(request)) //对这些请求进行处理 //大家会看到一个比较有意思的事 //自己封装了一个响应。这个响应里面没有服务端响应消息(服务端没给响应) //失去连接的状态表标识为true responses.add(new ClientResponse(request, now, true, null)); } }
因为长期没有收到请求,设置状态为disconnect,然后希望重新建立连接
public void disconnected(String id, long now) { NodeConnectionState nodeState = nodeState(id); //修缓存的对应主机的连接转态:DISCONNECTED //sender -> 检查网络是否可以举报发送消息的条件 -> 是否可以尝试建立网络连接。 //如果主机的状态是:DISCONNECTED,可以尝试初始化连接。 //最后调用networkclient的poll方法(Selector 去完成的最后的网络连接) nodeState.state = ConnectionState.DISCONNECTED; nodeState.lastConnectAttemptMs = now; }
转载地址:https://blog.csdn.net/weixin_37850264/article/details/112385646 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月05日 03时26分01秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP安装扩展mcrypt以及相关依赖项 【PHP安装PECL扩展的方法】
2019-04-27
Javascript到PHP加密通讯的简单实现
2019-04-27
德国SNS交友/视频网站Poppen.de的技术架构分享
2019-04-27
UNIX环境编程
2019-04-27
一笔画问题【数据结构-图论】
2019-04-27
红黑树
2019-04-27
安装多个gcc
2019-04-27
Linux0.01内核根目录Makefile注释
2019-04-27
【CSDN2012年度博客之星】需要您的一票,感谢大家的支持
2019-04-27
PHP对于浮点型的数据需要用不同的方法去解决
2019-04-27
Tokyo Cabinet 安装
2019-04-27
Flink在美团的应用与实践听课笔记
2019-04-27
Java多线程的11种创建方式以及纠正网上流传很久的一个谬误
2019-04-27
JDK源码研究Jstack,JMap,threaddump,dumpheap的原理
2019-04-27
Java使用字节码和汇编语言同步分析volatile,synchronized的底层实现
2019-04-27
javac编译原理和javac命令行的使用
2019-04-27
Unity使用UnityWebRequest实现本地日志上传到web服务器
2019-04-27
Unity使用RenderTexture实现裁切3D模型
2019-04-27
美术和程序吵架,原来是资源序列化格式设置不统一
2019-04-27
Unity iOS接SDK,定制UnityAppController
2019-04-27