- 浏览: 236207 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (101)
- Practice (17)
- Model (15)
- Prototype (2)
- Integration (6)
- GWT (3)
- Android (16)
- Lab (6)
- Ubuntu (4)
- Data Structure(D,S) (1)
- 社会观察员 (1)
- python (14)
- redis (0)
- mysql (9)
- php (0)
- Data Structure(D (1)
- haproxy (2)
- Shell (5)
- Zabbix (1)
- CentOS (1)
- sqlplus (1)
- rlwrap (1)
- Oracle (2)
- schema (2)
- user (1)
- accredit (1)
- Delphi (2)
- nagios (1)
- nginx (0)
最新评论
-
白云飞:
兄弟能不能发一份完整的源码到我邮箱?luochengwei20 ...
【Python真的很强大】程序Log实时监控 -
myreligion:
nice job!
解决一个棘手的bug: java.lang.NoClassDefFoundError: android.os.AsyncTask -
yw9002:
你这个貌似提交的时候整个页面都会刷新。
AjaxAnyWhere+Struts的一个应用(demo/feature crew) -
fkpwolf:
这总结偏向于细节了,流水账
Android app项目和开发总结 -
crazybull:
期待详细总结~~~
Android app项目和开发总结
怎样理解长(短)连结?
客户端向服务器发起连接→客户端提交HTTP请求→服务器返回HTTP回复.
无论长连接还是短连接 ,以上部分全部
是
一样的.
如果是长连接,则完成上述步骤后(在还没有timeOut前), 服务器不会马上关闭连接,而是等待客户端重用这个连接并再次发送HTTP请求.
如果是短连接,则服务器响应后关闭连接。客户端要再次发起连接请求后, 才可以另外完成一次请求<-->响应。
下面用telnet来描述:
telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. HEAD / HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 27 Nov 2009 09:15:31 GMT Server: Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6.5 Connection: close Content-Type: text/html;charset=ISO-8859-1 Connection closed by foreign host.
telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. HEAD / HTTP/1.1 Host:localhost HTTP/1.1 200 OK Date: Fri, 27 Nov 2009 09:18:53 GMT Server: Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6.5 Content-Type: text/html;charset=ISO-8859-1 GET / HTTP/1.1 Host: localhsot HTTP/1.1 200 OK Date: Fri, 27 Nov 2009 09:19:07 GMT Server: Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6.5 Content-Length: 6626 Content-Type: text/html;charset=ISO-8859-1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html> <head> <title>Index of /</title> </head> <body> <h1>Index of /</h1> <table><tr><th><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Las t modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr><tr><th colspan="5" ><hr></th></tr> <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="40X/">40X/</a></td><td align="right">11-Ju n-2009 10:42 </td><td align="right"> - </td></tr> <tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="DirectMarketingMail.msg.html">DirectMarketin gMail.msg.html</a></td><td align="right">11-Jun-2009 10:42 </td><td align="right"> 14K</td></tr> <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="ajax/">ajax/</a></td><td align="right">28- Sep-2009 12:57 </td><td align="right"> - </td></tr> <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="apache2-default/">apache2-default/</a></td ><td align="right">21-Nov-2004 04:16 </td><td align="right"> - </td></tr> <tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="crossdomain.xml">crossdomain.xml</a></td> <td align="right">16-Oct-2009 11:43 </td><td align="right">345 </td></tr> <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="demo/">demo/</a></td><td align="right">11- Jun-2009 10:42 </td><td align="right"> - </td></tr> <tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="demo_en.swf">demo_en.swf</a></td><td alig n="right">11-Jun-2009 10:42 </td><td align="right">221K</td></tr> <tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="demo_hk.swf">demo_hk.swf</a></td><td alig n="right">11-Jun-2009 10:42 </td><td align="right">228K</td></tr> <tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="demo_zh.swf">demo_zh.swf</a></td><td alig n="right">11-Jun-2009 10:42 </td><td align="right">238K</td></tr> <tr><td valign="top"><img src="/icons/image2.gif" alt="[IMG]"></td><td><a href="favicon.ico">favicon.ico</a></td><td align ="right">11-Jun-2009 10:42 </td><td align="right">3.6K</td></tr> <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="kiosk/">kiosk/</a></td><td align="right">1 1-Jun-2009 10:03 </td><td align="right"> - </td></tr> <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="moviepics/">moviepics/</a></td><td align=" right">11-Jun-2009 10:42 </td><td align="right"> - </td></tr> <tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="mpidatafeed.html">mpidatafeed.html</a></td>< td align="right">11-Jun-2009 10:42 </td><td align="right">2.1K</td></tr> <tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="mpimain.php">mpimain.php</a></td><td alig n="right">11-Jun-2009 10:42 </td><td align="right">1.2K</td></tr> <tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="pagenotfound.html">pagenotfound.html</a></td ><td align="right">11-Jun-2009 10:42 </td><td align="right">4.8K</td></tr> <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="pages.081120/">pages.081120/</a></td><td a lign="right">11-Jun-2009 10:42 </td><td align="right"> - </td></tr> <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="pages/">pages/</a></td><td align="right">1 1-Jun-2009 10:42 </td><td align="right"> - </td></tr> <tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="payment.php">payment.php</a></td><td alig n="right">11-Jun-2009 10:42 </td><td align="right">1.3K</td></tr> <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="press/">press/</a></td><td align="right">1 1-Jun-2009 10:42 </td><td align="right"> - </td></tr> <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="report.bak0820/">report.bak0820/</a></td>< td align="right">20-Aug-2009 11:25 </td><td align="right"> - </td></tr> <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="report/">report/</a></td><td align="right" >03-Sep-2009 17:41 </td><td align="right"> - </td></tr> <tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="servicenotavailable.html">servicenotavailabl e.html</a></td><td align="right">11-Jun-2009 10:42 </td><td align="right">4.3K</td></tr> <tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="test.htm">test.htm</a></td><td align="right" >11-Jun-2009 10:42 </td><td align="right">215 </td></tr> <tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="vbox/">vbox/</a></td><td align="right">11- Jun-2009 10:02 </td><td align="right"> - </td></tr> <tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="vboxmain.php">vboxmain.php</a></td><td al ign="right">11-Jun-2009 10:42 </td><td align="right"> 14K</td></tr> <tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="vboxsite.txt">vboxsite.txt</a></td><td align ="right">11-Jun-2009 10:42 </td><td align="right"> 24 </td></tr> <tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="vboxurlmap.php">vboxurlmap.php</a></td><t d align="right">11-Jun-2009 10:42 </td><td align="right">4.5K</td></tr> <tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="vboxurlmap.php.081016">vboxurlmap.php.081 016</a></td><td align="right">11-Jun-2009 10:42 </td><td align="right">4.3K</td></tr> <tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="vboxurlmap.php.bak">vboxurlmap.php.bak</a ></td><td align="right">11-Jun-2009 10:42 </td><td align="right">4.2K</td></tr> <tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="vboxweb.war">vboxweb.war</a></td><td alig n="right">11-Jun-2009 10:42 </td><td align="right">819K</td></tr> <tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="verify.php">verify.php</a></td><td align= "right">11-Jun-2009 10:42 </td><td align="right">506 </td></tr> <tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="verifymain.php">verifymain.php</a></td><t d align="right">11-Jun-2009 10:42 </td><td align="right">864 </td></tr> <tr><th colspan="5"><hr></th></tr> </table> <address>Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6.5 Server at localhsot Port 80</address> </body></html>
备注: http 1.0 实现的是短连接, http 1.1实现了长连接 .
下面用java来描述http 1.1的长连接.
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; public class MianTest { public static void main(String args0[]) throws Exception { Socket socket = new Socket("localhost", 8080); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); String header1 = "HEAD / HTTP/1.1\r\nHost:localhost\r\n\r\n"; String header2 = "GET / HTTP/1.1\r\nHost: localhost\r\n\r\n"; out.write(header1); out.flush(); StringBuffer sb = new StringBuffer(); while (true) { char c = (char) in.read(); System.out.print(c); if(c=='\r' || c=='\n') { sb.append(c); } else { sb.delete(0, sb.length()); } if(sb.toString().equals("\r\n\r\n")) { break; } } out.write(header2); out.flush(); sb.delete(0, sb.length()); StringBuffer line = new StringBuffer(); int content_length = 0; while (true) { char c = (char) in.read(); System.out.print(c); if(c=='\r' || c=='\n') { sb.append(c); } else { sb.delete(0, sb.length()); line.append(c); } if(sb.toString().equals("\r\n")) { String tmp = line.toString(); int index = tmp.indexOf("Content-Length: "); if(index >=0) { tmp = tmp.substring(index+"Content-Length: ".length()); //****************** read Content-Length ************************* StringBuffer content_len = new StringBuffer(); for(int item =0 ; item < tmp.length(); item++) { if(tmp.charAt(item) >= '0' && tmp.charAt(item) <= '9') { content_len.append(tmp.charAt(item) ); } else if (content_len.length() > 0) { break; } } content_length = Integer.parseInt(content_len.toString()); //****************** read Content-Length ************************* } line.delete(0, sb.length()); } if(sb.toString().equals("\r\n\r\n")) { //在两个回车换行之后 if(content_length > 0) { for(int index =0 ; index < content_length ; index++) { c = (char) in.read(); System.out.print(c); //提取Content } break; //完成一次Request(GET) } } } socket.close(); } }
ok,不用多说了。 注意 http 1.1 使用长连接的时候,需要加入Host:这个Field.
另外附加:
Key Differences between HTTP/1.0 and HTTP/1.1
发表评论
-
Phantomjs/Casperjs, HtmlUnit, Selenium在获取Javascript页面时特性对比
2015-11-28 13:53 2442Phantomjs/Casperjs, HtmlUnit, ... -
集合数据比较
2012-07-31 12:17 1147数据比较的原型模型是两集合的操作(求交集,并集,补集),如下 ... -
零星记忆---bug or not
2012-07-02 13:28 10731. sudo & > issue 问 ... -
MS SQL2000 数据库附加/备份/还原工具
2009-10-10 19:03 2163开源一个早些日子的MS SQL2000的数据库附加,备份,还原 ... -
数据库(增量恢复)
2007-01-15 12:55 1608生产线的sqlserver数据库infoservice星期日做 ...
相关推荐
... 【知识点详解】: ...服务器需要维护一个连接池,管理这些长连接,而客户端在发送请求时...通过阅读博主分享的源码和工具使用,我们可以深入理解HTTP长连接的工作原理,并从中学习到如何在实际项目中应用这些技术。
1. **HTTP长连接**:理解HTTP长连接的工作机制,如何实现连接复用以减少网络开销,以及在高并发场景下的连接管理和资源调度。 2. **Oracle SQL优化**:学习如何写出高性能的SQL语句,理解Oracle的查询优化器工作...
首先,让我们理解HTTP长连接的基本概念。在HTTP短连接中,每次HTTP请求完成后,服务器和客户端都会关闭TCP连接,为下一个请求重新建立连接。这在高并发场景下会消耗大量资源。相反,HTTP长连接保持TCP连接在多个HTTP...
Socket连接分为两种类型:长连接和短连接。这两种连接方式各有特点,适用于不同的应用场景。 **1. 短连接(Short Connection)** 短连接通常用于一次性、非持久性的通信,如HTTP协议就是典型的短连接。在短连接中...
本文将详细探讨TCP中的长连接和短连接,这两种连接方式在实际应用中的差异和选择。 长连接,也称为持久连接,指的是客户端(Client)与服务器端(Server)在完成连接建立后,保持连接状态不立即断开,以便于进行多...
本文将深入探讨如何构建高效的`requests`长连接池,这对于处理大量HTTP请求,尤其是涉及到频繁的API调用或者CDN刷新等场景时,能够显著提升性能和减少网络延迟。 首先,了解什么是长连接。在HTTP协议中,长连接...
在PHP开发中,cURL库是一个非常重要的工具,它用于处理HTTP和其他协议的请求。当涉及到频繁的HTTP通信,如API调用或者内部...开发者在实现长连接时,需要充分理解其工作原理,权衡利弊,并根据实际需求做出最佳选择。
在IT行业中,Spring Boot是一个广泛使用的Java框架,...使用Jodd HttpClient进行HTTP客户端测试,以及理解HTTP长连接在提升系统性能中的作用。通过深入理解和实践这些概念,开发者可以构建更加高效和稳定的微服务架构。
首先,理解长连接和短连接的概念至关重要。在TCP/IP通信中,短连接(Short Connection)是指一次数据传输完成后立即关闭连接,而长连接(Long Connection)则保持连接状态,以便后续的数据交换无需重复进行三次握手...
通过学习和理解这个C语言的长连接服务器Demo,开发者可以更好地掌握网络编程技术,尤其是如何在高并发场景下构建高效的服务器。这不仅对C语言程序员,对任何从事服务器端开发的工程师都是宝贵的实践经验。
长连接(Long Connection)则适用于需要频繁交互或保持连接状态的应用,如HTTPS、FTP和TCP保持连接的HTTP/2等。在长连接中,一次连接建立后,可以复用此连接进行多次数据传输,直到一方明确关闭连接。这种方式减少了...
通过阅读和理解这个示例,开发者可以学习到如何在Python、Java或其他支持Socket编程的语言中,建立、维护和管理长连接。同时,对于网络编程的基础知识,如TCP/IP协议、套接字API的使用等,也会有更深入的理解。
首先,我们要理解什么是“长连接”。在传统的HTTP协议中,每次请求与响应之间都建立新的TCP连接,这种模式被称为短连接。然而,短连接对于高并发、实时性要求高的场景(如即时通讯)来说,频繁的连接建立和断开会...
通过学习和分析这些内容,你可以深入理解ASP.NET如何利用HTTP长连接来实现实时通信,以及如何构建聊天室或其他需要实时数据更新的应用。这将有助于提升你的ASP.NET编程技能,尤其是处理高并发、实时性需求的场景。
在这个"ASP.NET 长连接做得在线聊天例子"中,我们将深入探讨如何利用ASP.NET技术实现一个实时的在线聊天系统,主要关注长连接的概念及其在聊天应用中的应用。 一、ASP.NET长连接 传统的HTTP协议是基于短连接的,即...
标题“c# Socket长连接 短链接 自己封装 通讯”揭示了我们将讨论的主题:如何使用C#实现Socket的长连接和短连接,并自定义通信协议。这里的关键点包括: 1. **Socket基础**:Socket是网络通信中的一个抽象概念,它...
本文将深入探讨Mina框架中的长连接与短连接,并通过提供的Minaclient和MinaHost工程实例进行详细解析。 首先,我们需要了解什么是长连接和短连接。在TCP/IP通信中,短连接是指一次完整的通信过程(如HTTP请求)结束...
与HTTP协议的短连接不同,MQTT的长连接允许客户端和服务器之间保持持续的会话状态,从而减少了建立和关闭连接的开销,提高了数据传输效率。这种连接方式对于需要频繁交换数据或者需要长时间在线的设备尤其重要,例如...
通过上述知识点的整理,我们可以深入理解Nginx与Tomcat以及客户端之间请求的长连接配置不一致问题的分析解决方法,同时也能掌握netstat命令在网络连接管理中的作用及其用法。这些知识点对于IT专业人员来说是必备的,...
在IT行业中,长连接是一种网络通信模式,与短连接相对,它允许客户端和服务器之间保持持续不断的数据传输,而不需要反复建立和断开连接。...通过学习和分析这个案例,开发者可以更好地理解和应用长连接技术。