手把手教你Socket短连接和长连接

本篇文章我们先从了解一下网络通信的基本常识,小鱼将会从Socket 逐步介绍短连接、长链接,以及长连接与短连接的选择。

何为Socket

Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层,即是一组接口,Socket 的概念最先由UNIX 操作系统提及,被广泛应用于各种操作系统和网络编程中。

在设计模式中,Socket 就是一个门面模式,将复杂的 TCP/IP 协议处理、通信缓存管理等,隐藏在 Socket 接口背后,对用户提供一组简单的接口来进行网络应用编程,复杂的数据处理和协议转换等逻辑交由 Socket 去组织。

例如:主机 A 的应用程序要和主机 B 的应用程序进行通信时,就必须先通过 Socket 建立连接。

  • 客户端连接上服务器时,客户端就会产生一个socket 接口实例。
  • 服务端每建立一个客户端连接,也会产生一个socket 接口实例,与客户端的socket 接口实例进行通信。
  • 服务器可以建立多个socket 连接,可以同时存在多个socket 接口实例。

短连接

短连接指的是每次Socket通信时都需要建立一个新的连接,Socket通信结束后立即关闭连接。

例如:HTTP 协议,这是一个无状态协议,浏览器每次与服务器通信时都会进行一次HTTP 请求,在浏览器得到服务器返回响应数据后连接就会中断。

短连接适用于数据量小、传输间隔时间较长的场景,像HTTP 这种。

长连接

长连接指的是客户端和服务器之间的Socket连接一旦建立,在一定时间内保持连接状态,可以进行多次数据传输。

建立连接的流程大概为 连接 -> 数据传输 -> 连接保持(心跳) -> 数据传输 -> ... -> 连接关闭

长连接只需要在第一次Socket通信时建立连接,之后的数据传输不需要重新建立连接,直到连接超时或显式关闭。适用于数据量大、传输频繁的场景,例如即时通讯、在线游戏等。

长连接为了保持连接会一直占有资源,可能会导致资源浪费,尤其是在客户端数量较少的情况下。所以在使用长连接时,我们需要注意心跳机制和超时设置,以避免无效连接占用资源。

长连接与短链接选择

长连接通常用于需要频繁通信的应用场景,特别是点对点的通信。

由于 TCP 连接的建立需要经过三次握手过程,这会消耗一定的时间。如果每次操作都需要重新建立连接,将显著影响处理速度。

因此,在长连接模式下,一旦连接建立,就会保持连接状态,以便后续操作可以直接发送数据,无需重复建立连接的过程。

例如,在数据库连接中使用长连接可以避免频繁通信导致的 socket 错误,并且可以避免socket 连接频繁建立对资源的浪费。

对于 WEB 服务, HTTP 1.0 协议通常使用短连接,这时候长连接就可能会增加服务器的资源消耗。

对于 WEB 网站而言,可能需要处理成千上万甚至上亿的客户端连接,如果都需要保持长连接,对服务器而言资源负担太大,而短连接用完就释放更加节省服务器的资源。

但是,随着 HTTP 协议的发展,从 HTTP/1.1 到 HTTP/2 和 HTTP/3,HTTP协议已经开始支持长连接。长连接还是短连接选择,具体还是得视情况而定,看需要侧重哪一方面的资源试用情况。

相关推荐
格物致知5705 分钟前
Nacos 使用说明
后端
用户68545375977696 分钟前
零拷贝技术完全指南:让数据坐上"直达高铁"!🚄
后端
该用户已不存在13 分钟前
我的Python工具箱,不用加班的秘密
前端·后端·python
文心快码BaiduComate22 分钟前
新手如何高效使用 Zulu 智能体?从入门到提效全指南
前端·后端
G探险者22 分钟前
云原生时代下的 JVM 内存管理:为什么你的服务不会“自动扩容”?
后端·云原生
渣哥26 分钟前
还在写繁琐监听器?Spring @EventListener 注解让你代码瞬间简化
javascript·后端·面试
搞笑我们是认真的_______狗才写代码29 分钟前
技术总监:学着点,我们团队就缺这样的人才
后端
马尚来31 分钟前
掌握Kotlin编程,从入门到精通:视频教程
后端·kotlin
yeyong32 分钟前
将所有的服务都放在里面做一个容器用supervisor管理进程 VS 用很多容器跑单独应用并集成一套,哪种更好?
后端
yeyong35 分钟前
在windows上如何编译出arm64架构可跑的go程序
后端