长连接与短连接的区别以及使用场景

news2024/11/23 22:20:48

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。

短连接

1、连接->传输数据->关闭连接
2、比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
3、因为连接后接收了数据就断开了,所以每次数据接受处理不会有联系。 这也是HTTP协议无状态的原因之一。

什么是短链接?

clientserver建立连接,client发送请求消息,server返回响应,一次连接就完成了。

这时候双方任意都可以发起close操作,不过一般都是client先发起close操作。上述可知,短连接一般只会在 client/server传递一次请求操作

短连接的优缺点

  • 管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段。

使用场景

  • 通常浏览器访问服务器的时候就是短连接。

  • 对于服务端来说,长连接会耗费服务端的资源,而且用户用浏览器访问服务端相对而言不是很频繁的

  • 如果有几十万,上百万的连接,服务端的压力会非常大,甚至会崩溃。

  • 所以对于并发量大,请求频率低的,建议使用短连接。

长连接

1、连接->传输数据->保持连接 -> 传输数据-> …->直到一方关闭连接,多是客户端关闭连接。
2、长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。

什么是长连接?
clientserver发起连接,server接受client连接,双方建立连接。

Clientserver完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。

长连接的生命周期

正常情况下,一条TCP长连接建立后,只要双不提出关闭请求并且不出现异常情况,这条连接是一直存在的.

操作系统不会自动去关闭它,甚至经过物理网络拓扑的改变之后仍然可以使用。

所以一条连接保持几天、几个月、几年或者更长时间都有可能,只要不出现异常情况或由用户(应用层)主动关闭。

客户端和服务单可一直使用该连接进行数据通信。

长连接的优点

  • 长连接可以省去较多的TCP建立和关闭的操作,减少网络阻塞的影响,

  • 当发生错误时,可以在不关闭连接的情况下进行提示,

  • 减少CPU及内存的使用,因为不需要经常的建立及关闭连接。

长连接的缺点

  • 连接数过多时,影响服务端的性能和并发数量。

什么时候用长连接,短连接?

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频 繁操作情况下需用短连好。

总之,长连接和短连接的选择要视情况而定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1098185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

想做WMS仓库管理系统,找了好久才找到云表

公司内部仓库管理原方式均基于人工电子表格管理方式来实现收发存管理,没有流程化管理,无法保证数据的准确性和及时性,同时现场操作和数据核对会出现不同步的情况,无法提高仓库的运作效率,因此,我们基于云表…

区块链服务网络BSN季度版本迭代说明【2023年Q3】

根据区块链服务网络发展联盟计划安排,BSN将每周进行一个小的版本迭代,每季度进行一个大的版本迭代,目前区块链服务网络(BSN)已完成最新季度版本迭代。 我们将按照BSN官方专网(国内版和国际版)、…

网络工程师知识点5

71、什么是FTP? FTP是文件传输协议。 FTP传输数据时支持两种传输模式:ASCII模式和二进制模式。 需要TCP的21号端口来建立控制连接 需要TCP的20号端口来建立数据连接 72、什么是telnet? Telnet提供了一个交互式操作界面,允许终端远…

用Eclipse写java代码

1.新建项目 2.选择创建java项目 3.输入项目名称,选择specific JRE 可以选1.8版本的,finish 4.在src中新建包,包名为项目名.包名 5.在包中新建类 如何修改eclipse字体大小 看这里 6.写代码,写好之后运行 报错a jni error…

问:TCP/IP协议栈在内核态的好还是用户态的好

“TCP/IP协议栈到底是内核态的好还是用户态的好?” 问题的根源在于,干嘛非要这么刻意地去区分什么内核态和用户态。 引子 为了不让本文成为干巴巴的说教,在文章开头,我以一个实例分析开始。 最近一段时间,我几乎每…

ASEMI整流桥GBJ2510参数:拆析其关键性能特点

编辑-Z 在众多的电力电子元件中,GBJ2510整流桥以其高效能和可靠性赢得了工业领域的广泛认可。这款设备是在电力系统、直流电源等一系列设备中不可或缺的组件。本文将详细反析GBJ2510整流桥参数的关键性能特点,以帮助用户更加全面地理解和使用这种电子设…

微信小程序用 canvas 实现手写签名弹框(全网最最最详细!!)

文章目录 一、签字面板效果图二、WXML文件三、JS文件四、WXSS文件五、小Tips ~ 一、签字面板效果图 二、WXML文件 &#x1f338;点击弹出手写签名面板事件 <van-button type"default" bindtap"handWrittenSign">点击弹出手写签名弹框</van-butt…

通过电商API接口,代购系统可以获取到商品、订单、物流等多种信息

代购系统需要接入电商API接口&#xff0c;以便实现与电商平台的交互与数据共享。通过电商API接口&#xff0c;代购系统可以获取到商品、订单、物流等多种信息&#xff0c;同时也可以完成下单、支付、退货等多种操作。 对于用户来说&#xff0c;接入电商API接口可以提供以下好处…

Linux性能基础:CPU、内存、磁盘等概述

目录 1. CPU 1.1. CPU常见品牌 1.2. CPU性能概述 ① CPU主频 ② CPU位数 ③ CPU缓存指令集 ④ CPU核心数 ⑤ IPC 1.3. 上下文切换 1.4. 进程与线程 ① 进程 ② 线程 2. 内存 2.1. 内存主频 2.2. 内存带宽 2.3. 内存分类 2.4. 内存的分配 2.5. 内存的回收 2.6. 内存泄漏 3. 磁盘…

Mysql系列---【linux安装mysql8.1.0】

1.下载安装包 官网链接: https://dev.mysql.com/downloads/mysql/ 注意:linux查看glibc版本的命令: rpm -qa|grep glibc 2.把下载的包上传到/opt/app/middles目录下 注意: 速度可能有点慢。 3.解压压缩包 #xz解压 xz -d mysql-8.1.0-linux-glibc2.17-x86_64.tar.xz #tar解压 t…

c++仿写小波分解和去噪代码(只使用基础库)

小波分解C版本 C代码 参考了一些Github的代码 最终代码可从链接下载。 main函数如果打不开的话&#xff0c;使用 #include <iostream> #include <vector> #include <fstream> #include "wavelet.h"int main() {// 读取原始信号数据std::ifstrea…

用户生成内容vs专业生成内容:谁主海外社媒营销江山?

随着社交媒体和数字营销的崛起&#xff0c;海外社媒营销已经成为各大品牌推广产品和服务的一种主要方式。然而&#xff0c;在选择最佳策略时&#xff0c;品牌经常会面临一个关键的问题&#xff1a;是使用用户生成内容&#xff08;UGC&#xff09;还是专业生成内容&#xff08;P…

fix: prosemirror adds two extra spaces when paste

bug 项目使用 prosemirror&#xff0c;复制 NodeSelection 时&#xff0c;会在末尾多出两个空格。 NodeSelection prosemirror 的 Selection 是抽象类&#xff0c;它有三个子类 TextSelection 最常见的NodeSelection 指向单一节点的选区。设置了 selectable true 的节点&am…

C++项目实战——基于多设计模式下的同步异步日志系统-⑪-日志器管理类与全局建造者类设计(单例模式)

文章目录 专栏导读日志器建造者类完善单例日志器管理类设计思想单例日志器管理类设计全局建造者类设计日志器类、建造者类整理日志器管理类测试 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领域新星创作者&#xff0c;新星计…

达梦数据库适配ServiceStack框架

注&#xff1a;达梦的驱动版本请使用2023第四季度及以后版本驱动才可以 ServiceStack介绍 ServiceStack官网&#xff1a; https://github.com/ServiceStack/ServiceStack ServiceStack是一个开源的十分流行的WebService框架&#xff0c;引用其官网的介绍&#xff1a;“Servic…

创建React Native的第一个hello world工程

创建React Native的第一个hello world工程 需要安装好node、npm环境 如果之前没有安装过react-native-cli脚手架的&#xff0c;可以按照下述步骤直接安装。如果已经安装过的&#xff0c;但是在使用这个脚手架初始化工程的时候遇到下述报错的话 cli.init(root, projectname);…

FPGA中的LUT查找表工作原理。

在RAM中填入1110,后续的不同AB组合Y输出对应的值&#xff0c;实现上面逻辑表达式的功能。

windows编译ollvm笔记

准备工作 1.找到Android SDK目录配置好cmake环境变量 E:\AndroidSDK\cmake\3.18.1&#xff08;E:\AndroidSDK为 Android SDK目录地址&#xff09;。 下载llvm-mingw编译环境(gcc编译器的windows版本&#xff0c;即可以在windows平台上使用gcc编译器)&#xff0c;下载地址&…

Linux安装rpm包在线安装mysql5.7

以前安装过mysql 前言&#xff1a;检查以前是否装有mysql rpm -qa|grep -i mysql安装了会显示&#xff1a;   bt-mysql57-5.7.31-1.el7.x86_64 停止mysql服务和删除之前安装的mysql rpm -e bt-mysql57-5.7.31-1.el7.x86_64查找并删除mysql相关目录 find / -name mysql/va…

QT开发工业自动化控制软件的几个常用模块

最近两年一直从事工业自动化制造企业的软件开发&#xff0c;发现跟以前开发网络软件还是有较大的区别&#xff0c;重点就是在一些细的方面&#xff0c;比如架构、模块、通讯之类的。下面举几个例子&#xff1a; 1、数字键盘&#xff08;替代普通键盘的小数字键盘&#xff09; …