手把手教你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协议已经开始支持长连接。长连接还是短连接选择,具体还是得视情况而定,看需要侧重哪一方面的资源试用情况。

相关推荐
Coder_Boy_几秒前
企业级项目高并发监控场景-Spring Boot 集成 Graphite & InfluxDB 实战文档
java·spring boot·后端·系统架构
索荣荣12 小时前
Java Session 全面指南:原理、应用与实践(含 Spring Boot 实战)
java·spring boot·后端
千寻技术帮14 小时前
10333_基于SpringBoot的家电进存销系统
java·spring boot·后端·源码·项目·家电进存销
dear_bi_MyOnly14 小时前
【多线程——线程状态与安全】
java·开发语言·数据结构·后端·中间件·java-ee·intellij-idea
小信丶15 小时前
@EnableTransactionManagement注解介绍、应用场景和示例代码
java·spring boot·后端
To Be Clean Coder15 小时前
【Spring源码】createBean如何寻找构造器(四)——类型转换与匹配权重
java·后端·spring
-孤存-16 小时前
SpringBoot核心注解与配置详解
java·spring boot·后端
2301_8187320616 小时前
项目启动报错,错误指向xml 已解决
xml·java·数据库·后端·springboot
小王不爱笑13217 小时前
SpringBoot 整合 Ollama + 本地 DeepSeek 模型
java·spring boot·后端
短剑重铸之日18 小时前
《设计模式》第七篇:适配器模式
java·后端·设计模式·适配器模式