免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1727 | 回复: 0
打印 上一主题 下一主题

[技术动态] 做网络服务器的看过来, 服务器如何抑制主动拆线的TIME_WAIT [复制链接]

论坛徽章:
9
程序设计版块每日发帖之星
日期:2015-10-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-01 06:20:00程序设计版块每日发帖之星
日期:2015-11-02 06:20:00每日论坛发贴之星
日期:2015-11-02 06:20:00程序设计版块每日发帖之星
日期:2015-11-03 06:20:00程序设计版块每日发帖之星
日期:2015-11-04 06:20:00程序设计版块每日发帖之星
日期:2015-11-06 06:20:00数据库技术版块每周发帖之星
日期:2015-12-02 15:02:47数据库技术版块每日发帖之星
日期:2015-12-08 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-10-21 15:48 |只看该作者 |倒序浏览
如何避免服务器端大量出现 TIME_WAIT的情况处理机制的说明:

目前正在做的服务器代码,  设计机制上要避免出现大量WAIT_WAIT,
TCP/IP连接, 谁先发起拆线, 谁就要socket TIME_WAIT(30秒-4分钟,取决于unix版本和设置)
  我做的服务器代码, 目前只有一种情况下, 服务器端将主动发起拆线, 就是 读超时,  也是空闲超时.

服务器端读超时前, 服务器端长时间处于收态, 服务器端定时器任务在该socket上发shutdown receive, 关服务器端receive,  EOF标志被附加到服务器端接收缓冲区的最后,  
  服务器端receive收完缓冲区的数据, 将收EOF,
  客户端TCP/IP底层将收到EOF标志, 客户端send如果发包,  也检测Error_code收EOF, 则客户端立即能够知道 , 此包未发成功, 可立即发起双向拆线 , 重连, 重发,  对方先拆, 服务器端无TIME_WAIT.   
  客户端中间只有1个很小的窗口期属于不确定状态, 对此期间的send数据包, 客户端send只能确认数据包进入本地发送缓冲区, 无法确认数据包最终下落,  发送后, 进入收态, .
  客户端如果send未发包, 则不能检测send通道EOF, 处于收态,

  服务器端receive收完缓冲区的数据, 并处理发送完毕, 再接收 将收EOF, BOOST asio receive_handler error_code=2,  同时服务器端检测发现内部read_time_out_set标志, 将执行关闭服务器端send,  然后定时器等待, 此EOF标志被附加到服务器端发送缓冲区的最后,  客户端在收完缓冲区所有数据后,  客户端receive EOF, 客户端将发起双向拆线, 服务器端无TIME_WAIT

      服务器端在延迟一段时间后, 99%以上的概率, 对方已经主动发起了拆线, 尤其是本地局域网,数据收发很快, 只有很小的概率, 数据和EOF未能在此期间发送到对方, 此时, 服务器端定时器发起主动拆线, 如果采用hard_close, 此时将清空所有缓冲区的数据, reset连接, 服务器端无TIME_WAIT, 满足高性能服务器的要求;  
如果采用soft_close,  就是普通的拆线流程, 此时所有缓冲区的数据被保留, 服务器端主动发起拆线, 系统将进入TIME_WAIT(30秒-240秒,取决于*inx版本和设置), 此方式可满足高可靠服务器的要求.  

     定时器的间隔可以设的很小, 然后轮询计数, 检查TCP/IP底层is_socket_connected( int socket_handle ), 如果对方已经断开, 就可以不等到最大等待时长.

     这里需要说明的是: 对于高可靠性设计原则的客户端, 需要在上述的"receive EOF, 客户端发起双向拆线"时, 增加 检查并确认, 是否收到响应包.并启动重连, 没有收到响应包, 要重连重发.做到不丢包.

     对于普通客户端, 例如:linux telnet等, 都会在上面的过程中, 主动发起disconnect, 并 退出服务.

     其余的所有情况都可以ASIO析构方式关闭, 或者close方式关闭.     因为都是对方主动拆的, TIME_WAIT在对方
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP