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

相关推荐
小_太_阳5 分钟前
Scala_【1】概述
开发语言·后端·scala·intellij-idea
智慧老师14 分钟前
Spring基础分析13-Spring Security框架
java·后端·spring
搬码后生仔2 小时前
asp.net core webapi项目中 在生产环境中 进不去swagger
chrome·后端·asp.net
凡人的AI工具箱2 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
Lx3522 小时前
Pandas数据重命名:列名与索引为标题
后端·python·pandas
小池先生2 小时前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
百罹鸟3 小时前
【vue高频面试题—场景篇】:实现一个实时更新的倒计时组件,如何确保倒计时在页面切换时能够正常暂停和恢复?
vue.js·后端·面试
小蜗牛慢慢爬行4 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
wm10434 小时前
java web springboot
java·spring boot·后端
龙少95436 小时前
【深入理解@EnableCaching】
java·后端·spring