✅介绍下什么是长连接和短连接?
典型回答
如果大家看过下面这篇:
就会知道,HTTP/1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。
这种其实就是短连接,所以,短连接的指的就是客户端与服务器之间的连接在每次请求完成后立即关闭,下一次请求需要重新建立连接 。
比较典型的应用场景就是HTTP 1.0,除此之外还有邮件协议(SMTP、POP3)、数据库连接(如 MySQL 短连接)等,也都是用短连接实现的。
短连接的优点是节约服务器资源,因为连接关闭后,服务器就不需要维护大量空闲连接了。也能避免服务器长时间维持过多连接,适合轻量级应用。
但是他的缺点更加明显,那就是每次链接都需要重新建立,比如HTTP 1.0中,每次网络请求都需要重新进行TCP的三次握手和四次挥手。有很多额外的性能开销。
那和短连接对比,**长连接指的就是客户端与服务器建立 TCP 连接后,保持连接状态,可以进行多次数据交互,避免频繁建立和关闭连接的开销。 **
长连接在HTTP 1.1( 使用 Connection: keep-alive)开始就广泛应用了,而且在很多其他的应用,比如聊天室、IM通信、游戏、视频直播等等,都是需要长连接的。
长连接的优点是减少 TCP 连接建立和关闭的开销,提高性能。他是用于高并发场景,如即时通讯、流媒体、物联网设备通信等。
缺点是服务器需要维护大量连接,可能导致资源占用增加(如文件描述符、内存)。连接可能因超时断开,需要心跳检测(KeepAlive 机制)来维持连接。
| **** | 短连接 | 长连接 |
|---|---|---|
| 连接建立 | 每次请求都要重新建立连接 | 连接建立后持续存在 |
| 数据传输 | 仅传输一次请求和响应 | 可以多次传输数据 |
| 资源占用 | 连接关闭后释放资源 | 服务器需要维护连接 |
| 通信方式 | 适用于一次性请求 | 适用于持续通信 |
| 适用场景 | HTTP 1.0、API 请求、邮件协议 | WebSocket、IM、流媒体、游戏 |
| 服务器压力 | 小(连接断开后不占用资源) | 大(需要维护更多连接) |
| 连接效率 | 低(频繁握手) | 高(减少握手次数) |
扩展知识
长连接维护方式
由于 TCP 长连接可能因网络波动、服务器策略等原因断开,通常会使用以下方式维持连接:
- 心跳机制(KeepAlive)
- 定期发送心跳包,告诉服务器“我还在线”。
- 服务器若长时间未收到心跳,则关闭连接。
- 常用于 WebSocket、MQTT(物联网协议)、数据库连接池等。
- 重连机制
- 如果连接断开,客户端会尝试自动重新连接,避免手动重启。