首页 > 其他分享 >长连接和短连接区别和优缺点

长连接和短连接区别和优缺点

时间:2023-04-06 12:33:48浏览次数:36  
标签:HTTP 区别 优缺点 server 发送 client 浏览器 连接

TCP与UDP

udp:面向无连接的通信协议,数据包括目的端口信息和源端口信息

优点:面向无连接,操作简单,要求系统资源较少,速度快,由于不需要连接,可进行广播发送

缺点:发送数据之前不需要与对方建立连接,接收到数据时也不需要发送确认信号,发送端不知道接收端是否正确接接收,不会重发,不可靠。

tcp:面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次挥手断开连接

优点:在数据传输时,有确认、窗口、重传、拥塞控制机制,能保证数据正确性,较为可靠

缺点:速度相对慢一点,要求系统资源较多

短连接

连接->传输数据->关闭连接

比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。

具体就是 浏览器client发起并建立TCP连接 -> client发送HttpRequest报文 -> server接收到报文->server handle并发送HttpResponse报文给前端,发送完毕之后立即调用socket.close方法->client接收response报文->client最终会收到server端断开TCP连接的信号->client 端断开TCP连接,具体就是调用close方法。

也可以这样说:短连接是指SOCKET连接后,发送接收完数据后马上断开连接。因为连接后接收了数据就断开了,所以每次数据接受处理不会有联系。这也是HTTP协议无状态的原因之一。

长连接

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

HTTP在短链接和长连接上的选择:HTTP是无状态的 ,也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。

如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话

HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌似最新的HTTP1.1 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。

如果浏览器或者服务器在其头信息加入了这行代码 Connection:keep-alive TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。

实现长连接要客户端和服务端都支持长连接。

优缺点

tcp长连接优缺点:长连接可以省去较多的tcp建立/关闭的操作,减少浪费,节省时间,对于频繁请求资源的客户,较适用于长连接;client和server如果长时间不关闭的话,会存在一个问题,随着客户的越来越多,server早晚会有扛不住的一天,这时需要采取一些策略,如关闭一些长时间不读写操作的连接,这样可以避免一些恶意连接导致server端服务受损,如果条件再允许,就可以以客户端为颗粒度,限制每个客户端的最大连接数

tcp短连接优缺点:短连接对于服务器来说较为简单,存在的连接都是有用的连接,不需要额外的控制,但如果客户端连接频繁,会在tcp的建立和关闭上浪费时间。

标签:HTTP,区别,优缺点,server,发送,client,浏览器,连接
From: https://www.cnblogs.com/izhoujie/p/17292396.html

相关文章

  • ES6 => map、filter方法的区别
    letdataArr=[{name:450200000,code:1},{name:450300000,code:2}....] map:会返回执行map方法的数组(dataArr),的所有项(条件不成立也会返回undefined),可以只返回项中的某一参数 filter:会返回执行filter方法的数组(dataArr),条件成立的项,会返回整个遍历的项(不能只返回项中的某一......
  • call、apply、bind的共同点及区别
    共同点:都可以改变this指向区别:call、apply可以立即执行,bind不会立即执行,因为bind返回的是一个函数,所以需要在后面加上()执行参数不同:apply的第二个参数式数组。call和bind有多个参数需要挨个写。......
  • 理论基础知识之————KB Kb Kbps 相关单位的区别和换算
    换算公式 8bit(位)=1Byte(字节)1024Byte(字节)=1KB1024KB=1MB1024MB=1GB1024GB=1TB 容量是大写的 B而传输的速度是小写的 bbps 是bitspersecond的缩写,表示比特/秒。    Bps 是bitypersecond的缩写,表示字节/秒。    这个p又可以写成/, S是秒的缩写,所......
  • Redis持久化RDB和AOF原理解析、使用和优缺点对比
    前言本文讲述Redis两种持久化方式RDB和AOF优缺点以及原理。为何需要持久化?Redis是基于内存操作的,进程终止、服务器宕机后内存数据会丢失,但是在很多使用场景中我们希望数据不丢失,服务重启之后数据还能恢复到停机前的状态,特别是使用Redis做数据库的情况。Redis持久化......
  • docker与k8s的区别
    docker:开源的应用容器引擎,允许开发人员将其应用和依赖打包成可移植的镜像,然后发布到任何流行的linux或windows机器上,也能实现虚拟化。kubernetes:谷歌开发的容器集群管理系统。在docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高......
  • 数据库连接池
    上下文管理和SQLHelperimportpymysqlfromDBUtils.PooledDBimportPooledDBclassSqlHelper(object):def__init__(self):self.pool=PooledDB(creator=pymysql,#使用链接数据库的模块maxconnections=6,#连接池允许的最大连......
  • flask蓝图/G对象/连接数据库/
    蓝图使用中大型项目推进使用蓝图来构建文件目录1.导入蓝图类fromflaskimportBlueprint2.实例化得到蓝图对象order_bp=Blueprint('order',name)3.在app中注册蓝图app.register_blueprint(order_bp)4.在不同的views.py使用蓝图注册路由@order_bp.route('/order')目......
  • sizeof 和 strlen 的区别
    sizeof() 是一个运算符,而 strlen() 是一个函数。sizeof() 计算的是变量或类型所占用的内存字节数,而 strlen() 计算的是字符串中字符的个数。sizeof() 可以用于任何类型的数据,而 strlen() 只能用于以空字符‘0’结尾的字符串。 注意:chars[]="hello"prinrf("%......
  • VMware安装CentOS7并用FinalShell连接
    时间:2023/4/5作者:Nhenk目录1.下载2.安装3.安装虚拟机3.1CentOS7.6下载3.2CentOS7.6安装3.3CentOS7.6的安装配置3.4CentOS7.6的网络配置3.4.1自动获取IP3.5FinalShell连接CentOS7.61.下载VMware2.安装因为我之前安装了docker而开启了Hyper-V,所......
  • sort,sorted,reverse,reversed的区别
    python中sort,sorted,reverse,reversed的区别简单的说以上四个内置函数都是排序。对于sort和reverse都是list列表的内置函数,一般不传参数,没有返回值,会改变原列表的值。而sorted和reversed是python内置函数,需要传参数,参数可以是字符串,列表,字典,元组,不管传的参数是什么sorted返回的......