最近针对公司的goscon网关发了一个PR,新增了握手阶段的超时判定。现在回顾一下Nginx的所有超时判定,看看目前还缺少哪些判定

ngx_http_core_module包含的timeout:

client_header_timeout (默认60秒)

client_body_timeout  (默认60秒)

keepalive_timeout   (默认75秒)

lingering_timeout   (默认5秒)

resolver_timeout    (默认30秒)

send_timeout      (默认60秒)

上述参数对应的行为如下:

  1. client_header_timeout对应的是客户端发送http请求头的行为
  2. client_body_timeout对应的是客户端发送http消息体的行为
  3. keepalive_timeout对应的是http 1.1协议里的保活时长
  4. lingering_timeout是配合lingering_close使用的,就是说关闭socket前,客户端还有数据发给服务器的话,lingering_close用于设定要不要等客户端继续发,lingering_timeout决定等多久。这里是一个等待-读取-抛弃数据的循环,有可能重复多次,但是每次等待都不会超过lingering_timeout设定的时长
  5. resolver_timeout对应的是域名解析的时长
  6. send_timeout对应的是发送http响应给客户端时的超时。这里对应的是两次写操作之间的时长,经过了send_timeout的时间后,还不能写的话,就关闭连接。

对应到goscon,目前的超时参数,是reuseTimeout和uploadMaxDelay。reuseTimeout会在read/write操作异常的时候生效,度过reuseTimeout时间后,goscon保持的连接对就会被释放,里面的缓存数据都会丢掉。从行为上看,有点类似Nginx的keepalive_timeout。

uploadMaxDelay是用在给socket设置读超时上的,只要设置了这个参数(和optUploadMinPacket),每次从socket里读数据都会设置一个deadline。超过deadline后,会返回错误。这里漏了一个写的超时,留了个SetWriteDeadline的接口,但是没有调用。每次写操作也应该有类似的流程,超过delay后write就返回error,Timeout()==True。这个参数类似于Nginx的send_timeout,针对的是两次成功写操作的间隔。缺陷是对方依然可以每次读1个字节,然后等满一次timeout来占用资源。

这次goscon新增的握手阶段的超时(handshakeTimeout),类似于client_header_timeout+client_body_timeout+send_timeout,包含了服务器对客户端的一次读,对客户端的一次写。之前只要连上tcp,不进行握手操作,不会有任何超时机制,目前新增的超时可以针对这种情况做处理。

Nginx超时设定的更多相关文章

  1. nginx超时重发

    最近一直遇到一个bug: 客户端会二次请求服务端,服务端多次调用remote服务. 特点是,这些请求都是模型切片相关的,耗时很长的请求,往往需要1分钟左右. 开始以为是客户端代码有问题,进行了二次请求 ...

  2. Erlang进程间消息接收超时设定

        Erlang消息接收函数,一般都会设计成尾递归调用自己的模式.但是这样的模式,如果没有消息则会无限的等待下去,所以为了不无限等待,这里可以加个超时设定,例如: flush() -> re ...

  3. nginx 超时问题: upstream timed out (110: Connection timed out) while reading response header from upstream

    目录 错误内容 错误原因 错误解决办法 错误内容 我们可以在error.log 里面可以看到 错误内容:upstream timed out (110: Connection timed out) w ...

  4. 支持xhr浏览器:超时设定、加载事件、进度事件

    各个浏览器虽然都支持xhr,但还是有些差异. 1.超时设定 IE8为xhr对象添加了一个timeout属性,表示请求在等待响应多少毫秒后就终止.再给timeout这只一个数值后,如果在规定的时间内浏览 ...

  5. Nginx超时配置

    Nginx超时配置 1.client_header_timeout 语法client_header_timeout time 默认值60s 上下文http server 说明 指定等待client发送 ...

  6. php nginx超时出错

    执行PHP操作大文件insert mysql数据库时,出现这个错误提示 The page you are looking for is temporarily unavailable.Please t ...

  7. PHP查询数据库较慢,nginx 超时 返回 504:Sorry, the page you are looking for is currently unavailable.

    现象: PHP查询数据库较慢,大约 60s 后 nginx 返回 504:Sorry, the page you are looking for is currently unavailable. 检 ...

  8. nginx超时问题

    一. 戏说不管你是做运维还是做开发,哪怕你是游客,时不时会遇到502 Bad Gateway或504 Gateway Time-out.出现这页面,把服务重启下,再实在不行重启下服务器,问题就解决了, ...

  9. php-fpm nginx 超时参数设置

    php-fpm:request_terminate_timeout = 30php.ini:max_execution_time = 30 request_terminate_timeout 适用于, ...

随机推荐

  1. Appium(四):真实机第一个appium程序、模拟器第一个appium程序、查看元素

    1. 真实机第一个appium程序 学完了前面的知识,也将环境搭建好了,接下来我们就正式开始appium的学习了. 在做app自动化的时候,我们肯定是针对某个产品.某个软件进行测试,那么我们一定是先让 ...

  2. fiddler 进行Android/IOS代理配置抓包

    1.准备:Android+IOS设备 下载:fiddler抓包工具,不是最新版的链接:   链接:https://pan.baidu.com/s/1BaBfu2H4xgpsh1wmkfC8aQ     ...

  3. table+分页+模糊查询

    这个分页超级棒嘞. 网页链接:http://www.cssmoban.com/cssthemes/7528.shtml

  4. 2019阿里天猫团队Java高级工程师面试题之第三面

    2019阿里天猫团队Java高级工程师面试题之第一面 2019阿里天猫团队Java高级工程师面试题之第二面 1.说说MySQL的锁并发?加锁的机制是什么? https://www.cnblogs.co ...

  5. adb devices无法连接mumu模拟器

    解决方案: 如果你的android环境能够直接访问 adb 的相关指令.只需要把mumu模拟器打开 然后打开cmd -> 输入 adb connect 127.0.0.1:7555 就能直接连上 ...

  6. 【Unity游戏开发】Android6.0以上的动态权限申请问题

    一.引子 最近公司的游戏在做安全性测试,期间也暴露出了不少安全上的问题.虽然我们今天要说的权限申请和安全性相关不大,但是也会影响到游戏的使用体验等,所以本篇博客中马三就想和大家谈谈Android6.0 ...

  7. 我眼中的 RPC

    目录 什么是 RPC ? 什么情况下使用 RPC ? RPC 框架原理 RPC 调用过程 RPC 优点 RPC 缺点 PHP RPC 有哪些? 小结 推荐阅读 什么是 RPC ? RPC 是一种框架或 ...

  8. 对于写Java的博文

    其实我是有过想要自己总结java相关的知识点给大家分享,但我的Java并不很好,大多数情况我只是拿Java当工具,写一些自己所需一些简单的东西,因此,大多数碰到我不懂的Java问题时,我也是上博客园, ...

  9. ABP入门教程6 - 领域层创建实体

    点这里进入ABP入门教程目录 创建实体 在领域层(即JD.CRS.Core)下新建文件夹Entitys //用以存放实体对象添加一个实体类Course.cs //课程信息 using Abp.Doma ...

  10. Linux —— 时间(tzselect、timedatactl命令,查看和修改时区,修改时区为东八区)【转】

    转自:https://blog.csdn.net/weixin_42167759/article/details/90648225 一.设置linux修改时区首先查看当前时区 #date -R显示结果 ...