http短链接和长连接以及超时问题

本文探讨了大文件下载可能带来的服务器带宽占用、并发数下降以及内存压力问题。同时,解释了Apache服务器中与超时相关的配置参数,如keepAliveTimeout、timeout和MaxKeepAliveRequests。强调了HTTP1.1的长连接特性以及其对大文件下载的影响。通过理解TCP连接的生命周期,可以优化服务器配置以应对大文件下载挑战。

业务场景:网页下载一个2G的压缩包,担心apache那边超时,目前apche配置120分钟超时,
    后来得知这个文件下载是一个长连接不存在超时情况。
引发联想问题:
    问题1:大文件下载,服务器会被占用带宽(导致(在线用户量减少)并发数减少甚至服务器宕机)
    问题2:代码压缩大文件,如果是全部读取完文件在压缩,占用大量内存服务器内存无法承受。        问题3:下载文件是否会超时。下面apache超时配置说明:
    keepAliveTimeout(连接存活时间,超过这个时间那么需要再新建另一个连接)
    timeout(浏览器和服务器连接的超时时间,超过这个时间服务器就会和浏览器断开),connection time-outMaxKeepAliveRequests表示一个连接最大支持的请求数。超过该请求数的连接也将被关闭
    (此时就会返回一个Connection: close头给客户端)
整理知识点:http、长连接、短连接、tcp、udp、socket。
    HTTP的长连接和短连接本质上是TCP长连接和短连接,经典的tcp3次握手
    http1.0默认连接为短连接,及客户端向服务器发送一次请求,服务器端响应后连接即会断掉
    http1.1后默认连接为长连接, Connection:Keep-Alive
    socket:套接字,api封装包 
    
后续补充哈。。。。

长连接短链接的配置方式取决于使用的协议框架,以下是一些常见的配置方法: --- ### 一、HTTP 协议中的长连接配置(Keep-Alive) 在 HTTP/1.1 中,默认使用长连接,可以通过以下方式配置: #### 1. **客户端(如浏览器)或服务器(如 Nginx、Apache)配置** - **请求头设置**: ```http Connection: keep-alive ``` - **服务器响应头设置**: ```http Connection: keep-alive Keep-Alive: timeout=5, max=100 ``` - `timeout=5`:连接空闲5秒后关闭。 - `max=100`:该连接最多处理100次请求后关闭。 #### 2. **Nginx 配置示例** ```nginx http { upstream backend { server 127.0.0.1:8080; } server { listen 80; location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Connection ''; proxy_set_header Keep-Alive 'timeout=60s'; proxy_buffering off; } } } ``` --- ### 二、TCP 长连接配置(如 Socket 编程) 在 TCP 套接字编程中,长连接需要手动管理。 #### 1. **服务端配置示例(Python)** ```python import socket server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(('0.0.0.0', 8888)) server.listen(5) while True: client_socket, addr = server.accept() print(f"Connected by {addr}") while True: data = client_socket.recv(1024) if not data: break print("Received:", data.decode()) client_socket.close() ``` #### 2. **客户端配置** ```python import socket import time client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('127.0.0.1', 8888)) for i in range(5): client.sendall(b"Hello Server") response = client.recv(1024) print("Server response:", response.decode()) time.sleep(1) client.close() ``` --- ### 三、短链接配置示例 短链接通常是一次请求后立即断开,例如: #### 1. **HTTP 短链接** - 客户端请求头中设置: ```http Connection: close ``` #### 2. **TCP 短链接** - 每次通信后主动关闭连接: ```python client.sendall(b"Hello") response = client.recv(1024) client.close() ``` --- ### 四、WebSocket 长连接配置(基于 HTTP 升级) #### 1. **客户端** ```javascript const socket = new WebSocket('ws://example.com/socket'); socket.onopen = () => { socket.send('Hello Server'); }; socket.onmessage = (event) => { console.log('Received:', event.data); }; ``` #### 2. **服务端(Node.js + ws 库)** ```javascript const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', (ws) => { console.log('Client connected'); ws.on('message', (message) => { console.log('Received:', message); ws.send(`Echo: ${message}`); }); }); ``` --- ### 总结配置要点: - **长连接**:保持连接、设置超时、心跳机制(如 `ping/pong`)。 - **短链接**:每次通信后关闭连接,适合一次性请求。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值