本文档用于证实客户端能够以正确的backoffs重连服务器。测试服务器有一个端口(控制端口),运行控制服务器的rpc服务,另一个端口(重试端口)来关闭任何进入的 tcp 连接。测试有下述流:

  1. 服务器开始在控制端口上监听。
  2. 客户端调用在服务器控制端口上调用一个rpc。
  3. 服务器开始在重试端口上监听。
  4. 客户端使用backoffs连接服务器的重试端口,尝试540s,也就是大约13次重试。
  5. 客户端在服务器控制端口上调用停止服务器。
  6. 客户端检查响应,看服务器是否认为backoffs符合规范,或者对响应种的backoffs做自己的检查。

客户端和服务器使用test.proto。每个语言都需要实现自己的客户端,C++服务器在多语言间共享。

Client

客户端需要接收这些参数:

  • -server_control_port = PORT

    • rpc连接的服务器端口。例如,“8080”。
  • -server_retry_port=PORT
    • 为测试备值连接服务器的端口。例如,“8081”。

客户端必须不适用TLS连接控制端口。客户端必须使用TLS连接重试端口。客户端应当诊断服务器返回的backoff状态或者检查它自己的backoffs。
客户端的过程:

  1. 在服务控制端口上用一个很大的deadline或者没有deadline开始调用,等待它的完成或者检验是否成功。
  2. 初始化一个通向服务器重试端口的channel连接,它将使用合适的backoffs进行重连。一个方便的方法来实现此功能是调用使用540s的deadline开始。超过deadline时rpc应当失败。
  3. 调用在服务器控制端口上停止,并检验是否成功。
  4. 检验回复来确定是否服务器认为backoff通过了测试。
  5. 可选的,客户端能够对返回的backoff做自己的检验。

Server

一个C++服务器能被用于这个测试。其他语言不需要实现一个服务器。为了最小化网络延时,服务器应当在相同的机器上运行,或者在客户端二进制可执行文件附近的机器上运行(网络上的距离概念)。

一个服务器实现对其状态的重连服务。它也在重试端口打开一个tcp server,它仅仅关闭所有进来的tcp连接来模拟连接失败。服务器将保留所有重连时间戳的记录并在响应中返回连接backoff。服务器也检查backoffs来判断是否它们符合规范并返回是否客户端通过了测试。

当另一个客户端在测试时,如果服务器接收到一个启动调用,当另一个客户端完成操作时,它结束该调用。当一个客户端正在被测试时,如果其他的主机连接服务器的retry_port,服务器将打印出一个错误,但是可能会认为客户端测试失败。
服务器接受这些参数:

  • -control_port=PORT

    • 控制rpcs监听端口。例如,“8080”
  • –retry_port=PORT
    • tcp服务器端口。例如,“8081”

Connection Backoff Interop Test Descriptions相关推荐

  1. GRPC Connection Backoff Protocol

    GRPC Connection Backoff Protocol 当我们向一个失败的后端进行连接时,通常不希望立即重试(为了避免请求flooding网络或者服务器) ,而是去做一些某种形式的指数bac ...

  2. OkHttp3的连接池及连接建立过程分析

    如我们前面在 OkHttp3 HTTP请求执行流程分析 中的分析,OkHttp3通过Interceptor链来执行HTTP请求,整体的执行过程大体如下: OkHttp Flow 这些Intercept ...

  3. HttpClient Get请求实例

    Httpclient是我们平时中用的比较多的,但是一般用的时候都是去网上百度一下,把demo直接拿过来改一下用就行了,接下来我们来看他的一些具体的用法.Apache HttpComponents™项目 ...

  4. mysql的用户名迁移SCHEMA_数据库实时转移之Confluent环境搭建(二)

    1.前言 上一篇主要介绍了Confluent的基本概念,如果对Confluent不了解的请回看上篇文章.七分熟pizza:数据库实时转移之Confluent介绍(一)​zhuanlan.zhihu.c ...

  5. 计算机网络英文题库(含答案) Chapter 2 Application Layer

    计算机网络英文题库 Chapter 2 Application Layer 1. In the following four descriptions, which one is correct? A ...

  6. android基础复习笔记——5.从OkHttp的源码来看HTTP

    1.OkHttp的历史: 最初是square觉得android给的那一套方案不是很好用,于是他给做了一下包装,包装以后就好用了,慢慢地,他们把httpclient给剔除了,再后来,他被Google给收 ...

  7. 登录mysql报错Failed to connect to backoff 或 Failed to get D-Bus connection: Operation not permitted解决方法

    报错: Failed to get D-Bus connection: Operation not permitted 或 mysql -u root -p 登录mysql时报错 2020-09-16 ...

  8. MariaDB: ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111 Connection refused)

    MariaDB : ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111 "Connection ref ...

  9. 【转】The underlying connection was closed

    转自: https://support.microsoft.com/en-us/kb/915599 SUMMARY This article describes error messages that ...

最新文章

  1. oracle可视化工具IB,oracle小记:dba_data_files
  2. 吕乐:医学影像学者的医者仁心 | 智源专访
  3. Python——拼接字符串
  4. python解非线性规划问题讲析_python中线性规划中的单纯形法、scipy库与非线性规划求解问题...
  5. JAVA_OA(六):SpringMVC拦截器
  6. handler和thread之间如何传输数据_网线虽常见,学问可不少,科普一下网线的简单知识及如何选择网线...
  7. 强大的CSS3动画库animate.css
  8. docker之使用supervisor管理多个进程
  9. COCO 54.7mAP!DetectoRS目标检测:改进主干网,成就新高度!
  10. 皮克公式(格点多边形内点的个数)
  11. Windows系统重装教程
  12. c语言确定闰月的步骤,怎么判断是闰月,农历闰月是如何确定的?
  13. edge浏览器,无法继续下载,提示检测到病毒的问题
  14. idea错误:否则 JavaFX 应用程序类必须扩展javafx.application.Application
  15. js base64解码JWT失败:VM273:1 Uncaught DOMException: Failed to execute 'atob' on 'Window': The string to
  16. aws mysql 多区_AWS RDS多可用区+EC2实例跑mysql从库的测试
  17. xcode 工程常见问题
  18. linux日志查看技巧
  19. 基于ZigBee和STM32的智能家居控制系统的设计与实现(二)
  20. node.js毕业设计安卓英语学习app(程序+APP+LW)

热门文章

  1. 第四天:目标规划(goal programming)
  2. word在试图打开文件时遇到错误,一种解决办法
  3. 胡子决定编程语言运势
  4. IT去中心化背后的低代码平台
  5. 视频转文字怎么操作?这三种转换方法你该学会
  6. 2021最新 深圳互联网公司排名
  7. 微信领取淘宝内部优惠券教程免费
  8. 农历大小月的确定方法
  9. 向技术大牛进击!!——计算机编程进修动员大会
  10. 浅谈零知识证明之二:简短无交互证明(SNARK)