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

相关推荐
vx_bisheyuange17 小时前
基于SpringBoot的失物招领平台的设计与实现
java·spring boot·后端·毕业设计
ByNotD0g17 小时前
Go 泛型 in 1.25
开发语言·后端·golang
IT_陈寒17 小时前
SpringBoot 3.x性能优化实战:这5个配置让你的应用启动速度提升50%
前端·人工智能·后端
BingoGo17 小时前
PHP 开发者指南 如何在 Composer 中使用本地包
后端·php·composer
计算机学姐17 小时前
基于SSM的宠物领养管理系统【2026最新】
java·vue.js·后端·java-ee·tomcat·mybatis·宠物
Qiuner17 小时前
Spring Boot AOP(一) 入门与核心概念
java·spring boot·后端·spring·aop
fegggye17 小时前
创建一个rust写的python库
开发语言·后端·rust
码事漫谈1 天前
C++ 多线程开发:从零开始的完整指南
后端
9ilk1 天前
【C++】--- 特殊类设计
开发语言·c++·后端
码事漫谈1 天前
十字路口的抉择:B端与C端C++开发者的职业路径全解析
后端