Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接

本文深入探讨TCP长连接和短连接,澄清HTTP协议无状态与TCP连接的关系。讲解了HTTP1.1中的长连接实现,以及长连接和短连接的优缺点,适用于不同场景的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

技术交流QQ群【JAVA,C++,Python,.NET,BigData,AI】:170933152

因为做语音通信要用到,长连接,这里对各个协议的长短连接做个总结

 

刚接触HTTP请求就听说过HTTP请求有1.0和1.1两个版本(其实还有个0.9版本,因为只接受GET一种请求,不支持POST方法,因此客户端无法向服务器传递太多信息而为人们所忽略),而且还知道HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默认都是长连接。但终究觉得对于长连接一直不明觉厉,有种抓不到关键点的感觉。

我们现在用的都是HTTP1.1版本,而HTTP1.1版本又是支持长连接的(也叫持久连接),因此我们平时用的都是长连接,

我之前一直这么认为的。经过最近的探索发现,这话并不是这样的。因为HTTP协议根本就没有长短连接这一说法。

众所周知,HTTP协议是基于请求/响应模式的,因此只要服务端给了响应,本次HTTP连接就结束了,或者更准确的说,是本次HTTP请求就结束了,下一次又是一个新的请求和新的响应,因此根本没有长连接这一说。那么自然也就没有短连接这一说了。

 

之所以网络上说HTTP分为长连接和短连接,其实本质上是说的TCP连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说。HTTP协议说到底是应用层的协议,而TCP才是真正的传输层协议,只有负责传输的这一层才需要建立连接。

 

因此“HTTP连接”这一概念压根就不应该出现,HTTP只是一个应用层的协议,根本就没有连接这一说法,就像FTP协议一样,我们从来不会说“FTP连接”吧。归根到

### TCP 长连接短连接的区别 在网络通信中,TCP 连接可以分为长连接短连接两种主要形式。 #### 短连接特性 对于每次请求/响应交互都建立新的 TCP 连接称为短连接。这种机制下客户端服务端完成一次握手后仅传输少量数据就关闭连接[^1]。这种方式适合于事务处理较少的应用程序或者一次性查询操作,因为其减少了服务器资源占用的时间长度,使得同一时间内能够服务更多的客户请求。 #### 长连接特性 相比之下,当一个持续存在的会话被维持在一个已经建立好的 TCP 连接上时,则称之为长连接。在这种情况下,同一个物理链路可以在多个逻辑消息之间重复利用而不需要频繁地经历三次握手过程来初始化新链接以及四次挥手来进行终止流程。因此它更适合用于需要连续发送大量数据包的情况,比如流媒体播放、即时通讯软件等实时性强的服务。 ```python import socket def create_short_connection(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: sock.connect(('example.com', 80)) request = b'GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n' sock.sendall(request) response = sock.recv(4096) finally: sock.close() def maintain_long_connection(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('example.com', 80)) while True: message = input('Enter your message or type exit:') if message.lower() == 'exit': break request = f'POST /chat HTTP/1.1\r\nHost: example.com\r\nContent-Length:{len(message)}\r\n\r\n{message}'.encode() sock.sendall(request) response = sock.recv(4096).decode() print(response) if __name__ == '__main__': # Uncomment one of these lines based on whether you want a short or long connection demo. #create_short_connection() #maintain_long_connection() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

添柴程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值