最近有这样一个问题,想请教一下各位大佬,想问一下在大家的实际业务中,一个会话的默认持续时间是多少? 首先,区分一下,这个问题指的不是三次握手和四次挥手中出现的等待时间,是想问一个会话默认不活动的话多久会断开连接呢,如果要设置的话会用到哪些字段。目前感觉这个问题可能会有不同的角度,例如从服务器端(包括不同的服务器软件)、用户端、TCP 、UDP 、HTTP ,所以比较迷惑,感觉各位大佬实际业务接触的比较多,见多识广,相信可以帮助我解决这个疑惑。
1
maja 2021-12-13 10:21:54 +08:00
42
|
2
axuhongbo OP 请问下是 42s 吗,这个是什么字段呢
|
3
3dwelcome 2021-12-13 10:47:06 +08:00
我也是 42s 左右,我是 webview 长轮询消息推送,实测安卓手机 42s 不活动,TCP 会强制断开。
所以基本上 30s 必定会发一个心跳包,保持 TCP 活动。 当然每个手机的表现也不一样,时长也不一样,30s 心跳包是所有手机里,最稳妥的方案。 电脑浏览器应该就没这问题,TCP 没活动,几分钟都不会断开。 |
4
SoloCompany 2021-12-13 13:28:57 +08:00 via iPhone
1. tcp 默认没有这样的行为,但万恶的防火墙有,并且粗暴的不完成完整的 tcp 断开流程约定,会造成业务无响应
2. http 找你的服务器文档看如何配置 3. 自己实现 tcp 服务器的话需要自己去实现断开的逻辑 4. 建议取值略小于防火墙设置,这样的性能最优,而如果不希望保持太多的空闲连接,可以设置为一到两分钟空闲关闭 |
5
mx8Y3o5w3M70LC4y 2021-12-13 13:33:40 +08:00 via Android
“42, 有些东西与这个数字有关~”
|
6
julyclyde 2021-12-15 12:16:03 +08:00
表面上你问的是会话
实际上你问的是连接? |
7
axuhongbo OP @julyclyde 这两个我具体也搞不清楚啥区别,就是想知道一下会话的持续时间。。但是又不是建立连接和断开连接时的那个超时时间。连接断开好像会话就结束了吧。。
|
9
maja 2021-12-19 12:09:02 +08:00
42 是开玩笑说的,不要当真。
这个会话你得看是指的什么,是 tcp 层面的连接,还是指的应用层的 session, 每个都不一样。 举个例子,如果是 tcp 连接的超时,那么这个是全链路任何一跳都可以坑你一下的。 两种解决方案, * 设置超短 tcp keepalive 或者协议层心跳 * 改成面向无连接的协议,比如 udp 之类的 如果是物联网这种,需要持续的监测端到端的最小心跳间隔。 解决这个基本上需要全链路的知识,但是楼主既然提出了这个问题那么说明并不是解决这个问题的合适人选。我觉得最简单的解决方法是反馈上级,让上级去解决。 |