HTTP是无状态的
也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的Web页中包 含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话
HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌似最新的 http1.0 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。
如果浏览器或者服务器在其头信息加入了这行代码
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。
实现长连接要客户端和服务端都支持长连接。
如果web服务器端看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接), 它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点, web服务器需要在返回给 客户端HTTP头信息中发送一个Content-Length(返回信息正文的长度)头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然 后在正式写出内容之前计算它的大小
无论客户端浏览器 (Internet Explorer) 还是 Web 服务器具有较低的 KeepAlive 值,它都将是限制因素。例如,如果客户端的超时值是两分钟,而 Web 服务器的超时值是一分钟,则最大超时值是一分钟。客户端或服务器都可以是限制因素
在header中加入 --Connection:keep-alive
在HTTp协议请求和响应中加入这条就能维持长连接。
再封装HTTP消息数据体的消息应用就显的非常简单易用
Http Keep-Alive seems to be massively misunderstood. Here's a short description of how it works, under both 1.0 and 1.1
HTTP/1.0
Under HTTP 1.0, there is no official specification for how keepalive operates. It was, in essence, tacked on to an existing protocol. If the browser supports keep-alive, it adds an additional header to the request:
Connection: Keep-Alive
Then, when the server receives this request and generates a response, it also adds a header to the response:
Connection: Keep-Alive
Following this, the connection is NOT dropped, but is instead kept open. When the client sends another request, it uses the sameconnection. This will continue until either the client or the server decides that the conversation is over, and one of them drops theconnection.
HTTP/1.1
Under HTTP 1.1, the official keepalive method is different. All connections are kept alive, unless stated otherwise with the following header:
Connection: close
The Connection: Keep-Alive header no longer has any meaning because of this.
Additionally, an optional Keep-Alive: header is described, but is so underspecified as to be meaningless. Avoid it.
Not reliable
HTTP is a stateless protocol - this means that every request is independent of every other. Keep alive doesn’t change that. Additionally, there is no guarantee that the client or the server will keep the connection open. Even in 1.1, all that is promised is that you will probably get a notice that the connection is being closed. So keepalive is something you should not write your application to rely upon.
KeepAlive and POST
The HTTP 1.1 spec states that following the body of a POST, there are to be no additional characters. It also states that "certain" browsers may not follow this spec, putting a CRLF after the body of the POST. Mmm-hmm. As near as I can tell, most browsers follow a POSTed body with a CRLF. There are two ways of dealing with this: Disallow keepalive in the context of a POST request, or ignore CRLF on a line by itself. Most servers deal with this in the latter way, but there's no way to know how a server will handle it without testing.
Java应用
client用apache的commons-httpclient来执行method 。
用 method.setRequestHeader("Connection" , "Keep-Alive" or "close") 来控制是否保持连接。
常用的apache、resin、tomcat等都有相关的配置是否支持keep-alive。
tomcat中可以设置:maxKeepAliveRequests
The maximum number of HTTP requests which can be pipelined until the connection is closed by the server. Setting this attribute to 1 will disable HTTP/1.0 keep-alive, as well as HTTP/1.1 keep-alive and pipelining. Setting this to -1 will allow an unlimited amount of pipelined or keep-alive HTTP requests. If not specified, this attribute is set to 100.
相关推荐
综上所述,Java实现Socket长连接和短连接涉及网络通信基础、连接管理、异常处理等多个方面,开发者需要根据实际需求权衡选择合适的方式。通过深入理解这些概念和技术,可以有效地优化网络服务,提升应用的性能和用户...
### 长连接和短连接的概念 在网络通信中,客户端与服务器之间建立连接进行数据交换是一种常见的模式。根据连接管理的不同策略,可以将这种连接分为长连接和短连接两种主要形式。 #### 1. 什么是长连接? 长连接是...
长连接和短连接是两种常见的网络通信模式,长连接也被称为持久连接,是指在建立连接后,连接长期保持开启状态,直到一方明确要求关闭连接。这种连接方式在P2P通信中较为常见,适用于通信频率较高、需要维持一定连接...
在TCP/IP通信程序设计中,长连接和短连接是两种主要的连接方式,它们各自有其特点和适用场景。理解这两种连接方式对于开发者来说至关重要,因为它们直接影响到系统的效率、资源管理和安全性。 **长连接**是指客户端...
"短连接"和"长连接"是Socket连接的两种不同模式,它们在处理网络请求时有着显著的区别。 短连接(Short Connection)通常用于一次性或者较少交互的服务,如HTTP协议就是基于短连接的。在短连接中,每次通信完成后,...
本文将深入探讨Mina框架中的长连接与短连接,并通过提供的Minaclient和MinaHost工程实例进行详细解析。 首先,我们需要了解什么是长连接和短连接。在TCP/IP通信中,短连接是指一次完整的通信过程(如HTTP请求)结束...
2. **长连接与短连接**:在TCP/IP协议中,连接有两种模式。短连接通常用于一次性传输数据,如HTTP请求,连接建立后立即传输数据并关闭。而长连接则保持一段时间的开放状态,允许多次数据交换,如FTP或HTTPS。在C#中...
程序主要以cs模式,完成了用户的验证(包括写入数据库、查询数据库和写日志文件等功能)、数据查询等操作。 客户端运行,提供用户4中选择操作的方式,用户可以按照提示进行程序使用。其中,“0”代表查询所有信息、...
TCP连接分为长连接和短连接,这两种连接方式各有其特点和适用场景。本Demo是用C++语言在VS2017环境下编写的,旨在帮助开发者理解TCP长连接和短连接的实现。 首先,我们要理解TCP连接的基本概念。TCP是一种面向连接...
在TCP中,有两种连接方式:长连接和短连接。 短连接,顾名思义,是一次性完成数据传输后立即断开连接的模式。这种方式简单高效,但频繁建立和断开连接会消耗较多的系统资源,对于高并发、低延迟的场景可能不适用。 ...
在这个实例中,我们将深入探讨如何利用Apache Mina实现TCP的长连接和短连接。 首先,TCP(传输控制协议)是互联网上广泛使用的面向连接的协议,它保证了数据的可靠传输。TCP连接分为两种类型:长连接和短连接。 1....
- **短事务/小事务:** 对于短事务和小事务,共享连接模式更为合适,因为它可以有效地平衡资源使用与响应速度。 - **特殊场景考虑:** 在某些特殊场景下,例如处理长时间运行的大事务时,需要权衡使用哪种连接模式。...
然而,传统的HTTP通信方式采用短连接模式,即每次请求结束后都会断开连接,这种机制在处理大量小请求时效率低下,因为频繁的连接和断开过程消耗了大量的资源和时间。 #### HTTP长连接(Persistent Connection) ...
传统的HTTP短连接模式下,每次请求都会建立新的连接,处理完后立即关闭,不适合需要持续通信的场景。而HTTP长连接(Comet)则旨在克服这个限制,保持连接打开状态,允许服务器在合适的时候主动推送数据。 二、Comet...
相比短连接,长连接减少了握手和释放连接的开销,提高了系统性能,尤其是在高并发场景下。 C语言中的网络编程主要依赖于套接字(socket)API。创建一个TCP服务器的基本步骤包括:创建套接字、绑定地址、监听连接...
在TCP/IP协议族中,Socket分为两种类型:短连接(Short-lived Connection)和长连接(Long-lived Connection)。短连接通常用于一次性传输数据,如HTTP请求;而长连接则适合于保持连接状态,以便进行多次数据交互,...
在传统的HTTP协议中,每次请求与响应之间都建立新的TCP连接,这种模式被称为短连接。然而,短连接对于高并发、实时性要求高的场景(如即时通讯)来说,频繁的连接建立和断开会带来大量的网络开销和延迟。为了解决这...
编写网络程序时需要正确区分长、短连接,以便选择合适的连接模式。 对长连接的维护 长连接需要维护,包括检测对方的主动断连和宕机、异常退出及网络不通。可以使用“心跳”机制来检测对方的状态,并在检测到对方断...
在IT行业中,长连接是一种网络通信模式,与短连接相对,它允许客户端和服务器之间保持持续不断的数据传输,而不需要反复建立和断开连接。在标题提到的"C#长连接案例服务器推进器"中,我们将深入探讨如何使用C#语言...
本项目基于ASIO进行封装,提供了对TCP和UDP协议的支持,同时涵盖了长连接、短连接以及组播、单播和广播等高级网络通信模式。现在我们将深入探讨这些知识点。 首先,TCP(Transmission Control Protocol)是一种面向...