原文地址:https://www.jianshu.com/p/173009ccfd7b 转载请注明出处
短连接
连接->传输数据->关闭连接
HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。
长连接
连接->传输数据->保持连接 -> 传输数据-> ... ->关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
http的长连接
HTTP也可以建立长连接的,使用Connection:keep-alive,HTTP 1.1默认进行持久连接。
HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌似最新的 http1.0 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。
什么时候用长连接,短连接?
长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。
每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,每次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。
所以并发量大,但每个用户无需频繁操作情况下需用短连接好。
补充与扩展
通俗点讲,短连接就是一次TCP请求得到结果后,连接马上结束.而长连接并不马上断开,而一直保持着,直到长连接TIMEOUT(具体程序都有相关参数说明).长连接可以避免不断的进行TCP三次握手和四次挥手.
长连接(keepalive)是需要靠双方不断的发送探测包来维持的,keepalive期间服务端和客户端的TCP连接状态是ESTABLISHED。
相关推荐
本压缩包文件"面试常问必备之MySQL面试55题.zip"包含了55个常见的MySQL面试问题,这些问题涵盖了MySQL的基础知识、查询优化、事务处理、存储引擎、索引策略等多个方面。以下是对这些关键知识点的详细解释: 1. **...
这些公司对于应聘者的面试通常涉及到广泛的IT技术知识,包括但不限于计算机基础、算法与数据结构、操作系统、网络、数据库、编程语言等。下面我们将围绕这些主题,详细阐述可能在BAT面试中遇到的知识点。 1. 计算机...
以下是一些Java面试中最常被问到的知识点,包括但不限于核心概念、数据结构与算法、多线程、集合框架、异常处理、IO流、网络编程以及设计模式等。 1. **核心概念**: - Java的特点:一次编写,到处运行(Write ...
2. **数据结构与算法**:面试中常考的数据结构有数组、链表、栈、队列、堆、树(二叉树、平衡树如AVL和红黑树)、图等,以及相关的排序算法(冒泡、选择、插入、快速、归并、堆排序)和查找算法(顺序、二分、哈希)...
### Android面试常问问题详解 #### 一、单线程模型中Message, Handler, MessageQueue, Looper之间的关系 在Android开发中,了解主线程及其内部机制是非常重要的。主线程通常被称为UI线程,它是负责处理用户交互...
以下是对"面试常问必备之MySQL面试55题"中可能涉及的一些核心知识点的详细解释。 1. **数据库基本概念**: - **关系型数据库**:MySQL是一种基于ACID(原子性、一致性、隔离性、持久性)原则的关系型数据库,支持...
3. 列表(List):双向链表结构,支持两端插入和删除元素,常用于实现消息队列。 4. 集合(Set):无序且不重复的元素集合,支持交集、并集、差集操作。 5. 有序集合(Sorted Set):与集合类似,但每个元素都有一个...
- **连接池管理**:减少连接创建和销毁的开销。 - **缓存穿透与击穿**:通过布隆过滤器防止无效查询,设置过期策略避免大量数据同时失效。 9. **Redis的安全性** - **访问控制**:通过配置文件设置密码,限制...
以下是对"面试常问必备之MySQL面试55题-10"中可能涉及的一些核心知识点的详细解释: 1. **SQL基础**: - **SELECT语句**:了解如何从表中选择数据,包括使用WHERE子句进行条件过滤,GROUP BY用于分组,HAVING用于...
MySQL 面试常问问题及答案 MySQL 数据类型: 1. 整型 (int):用于存储整数,如 1、2、3 等。 2. 字符串型 (char):用于存储固定长度的字符串,如 'hello'。 3. 可变长度字符类型 (varchar):用于存储可变长度的...
本文将基于“计算机考研复试面试常问问题 计算机网络篇(上)”的主题,深入探讨一些可能在面试中遇到的重点知识。 一、计算机网络概述 计算机网络是指多台计算机通过通信设备连接,实现数据交换、资源共享和协同...
在计算机网络领域,面试中经常涉及到的关键知识点包括网络协议、OSI模型、TCP/IP模型以及TCP与UDP的区别。以下是对这些概念的详细解释: **OSI七层模型**: OSI(Open Systems Interconnection)开放系统互连模型是...
【Java高级面试知识点详解】 Java作为企业级应用的主流编程语言,其高级面试知识点涵盖了广泛的技术领域,包括Spring框架、微服务、性能优化以及高并发处理。以下是对这些知识点的详细解析: ### Spring框架 ...
"计算机组成原理复试/夏令营面试常问问题" 计算机组成原理是计算机科学中的一门重要课程,对于计算机科学和技术专业的学生来说,掌握计算机组成原理是非常必要的。本文将对计算机组成原理的知识点进行总结和解释,...
本压缩包包含了关于数据库优化的多个文档,如"SQL语句优化.doc"、"数据库优化:.doc"和"SQL优化.doc",这些都是面试中经常被问到的主题。下面将对这些知识点进行详细的阐述。 1. SQL语句优化 SQL语句是数据库操作的...
1. HTTP 客户端与服务端建立一个 TCP 套接字连接。 2. HTTP 客户端通过 TCP 套接字,向服务器发送一个文本的请求报文。 3. HTTP 服务器解析请求,定位请求资源。服务器将处理结果写入 TCP 套接字,发给客户端。 4. ...
以上是针对Linux面试中可能遇到的问题和相关知识的详细解答,涵盖从基础概念到高级技巧,帮助面试者全面了解和准备Linux相关职位的面试。通过深入学习和实践,可以进一步提升Linux技能,为职业发展打下坚实基础。
.NET面试必问的面试题 本文总结了.NET面试中常见的问题,涵盖了抽象类和接口、访问修饰符、封装、继承、多态、ADO.NET和页面之间传值的几种方式等知识点。 一、抽象类和接口 抽象类是一种特殊的类,它可以包含非...
在面试中,Java开发者经常会遇到关于面向对象、关键字使用、类与接口关系、多态性、并发处理以及反射等多个核心概念的问题。 1. 面向对象的理解:面向对象是基于面向过程的编程思想发展而来,它强调通过对象来组织...