精华内容
下载资源
问答
  • TCP长连接

    2014-12-16 14:19:18
    TCP长连接
    TCP长连接
    
    展开全文
  • 文章目录tcp长连接和短连接TCP通信的整个过程,如下图:1. TCP短连接2. TCP长连接3. TCP长/短连接操作过程3.1 短连接的操作步骤是:3.2 长连接的操作步骤是:4. TCP长/短连接的优点和缺点5. TCP长/短连接的应用场景 ...

    tcp长连接和短连接

    TCP在真正的读写操作之前,server与client之间必须建立一个连接,

    当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,

    连接的建立通过三次握手,释放则需要四次握手,

    所以说每个连接的建立都是需要资源消耗和时间消耗的。

    TCP通信的整个过程,如下图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8I8l4P1s-1579683415737)(../Images/12day/%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B%E3%80%81%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B.png)]

    1. TCP短连接

    模拟一种TCP短连接的情况:

    1. client 向 server 发起连接请求
    2. server 接到请求,双方建立连接
    3. client 向 server 发送消息
    4. server 回应 client
    5. 一次读写完成,此时双方任何一个都可以发起 close 操作

    在步骤5中,一般都是 client 先发起 close 操作。当然也不排除有特殊的情况。

    从上面的描述看,短连接一般只会在 client/server 间传递一次读写操作!

    2. TCP长连接

    再模拟一种长连接的情况:

    1. client 向 server 发起连接
    2. server 接到请求,双方建立连接
    3. client 向 server 发送消息
    4. server 回应 client
    5. 一次读写完成,连接不关闭
    6. 后续读写操作…
    7. 长时间操作之后client发起关闭请求

    3. TCP长/短连接操作过程

    3.1 短连接的操作步骤是:

    建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VRvm4m2r-1579683415738)(../Images/12day/%E7%9F%AD%E8%BF%9E%E6%8E%A5.png)]

    3.2 长连接的操作步骤是:

    建立连接——数据传输…(保持连接)…数据传输——关闭连接

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vjtIRG9y-1579683415739)(../Images/12day/%E9%95%BF%E8%BF%9E%E6%8E%A5.png)]

    4. TCP长/短连接的优点和缺点

    • 长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。

      对于频繁请求资源的客户来说,较适用长连接。

    • client与server之间的连接如果一直不关闭的话,会存在一个问题,

      随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,

      如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损;

      如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,

      这样可以完全避免某个蛋疼的客户端连累后端服务。

    • 短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。

    • 但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。

    5. TCP长/短连接的应用场景

    • 长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。

      每个TCP连接都需要三次握手,这需要时间,如果每个操作都是先连接,

      再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,

      再次处理时直接发送数据包就OK了,不用建立TCP连接。

      例如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,

      而且频繁的socket 创建也是对资源的浪费。

    • 而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,

      而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,

      如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,

      那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

    展开全文
  • tcp长连接tcp短连接

    2014-01-06 11:17:01
    TCP长连接与短连接的区别1. TCP连接当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次...

    TCP长连接与短连接的区别1. TCP连接当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图:2. TCP短连接我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起close操作。为什么呢,一般的server不会回复完client后立即关闭连接的,当然不排除有特殊的情况。从上面的描述看,短连接一般只会在client/server间传递一次读写操作短连接的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段3.TCP长连接接下来我们再模拟一下长连接的情况,client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。首先说一下TCP/IP详解上讲到的TCP保活功能,保活功能主要为服务器应用提供,服务器应用希望知道客户主机是否崩溃,从而可以代表客户使用资源。如果客户已经消失,使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,则服务器将应远等待客户端的数据,保活功能就是试图在服务器端检测到这种半开放的连接。如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段,客户主机必须处于以下4个状态之一:客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测 ,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。客户机正常运行,但是服务器不可达,这种情况与2类似,TCP能发现的就是没有收到探查的响应。从上面可以看出,TCP保活功能主要为探测长连接的存活状况,不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,属于比较斯文的做法,遇到恶意的连接时,保活功能就不够使了。在长连接的应用场景下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务。长连接和短连接的产生在于client和server采取的关闭策略,具体的应用场景采用具体的策略,没有十全十美的选择,只有合适的选择。参考:1. TCP/IP详解 卷一转自: http://www.cnblogs.com/beifei/archive/2011/06/26/2090611.html出处:http://www.cnblogs.com/liuyong/作者喜欢研究 Sql Server ,ASP.NET MVC , Jquery WCF 等技术,同时关心分布式架构的设计应用。转载请保留原文链接,谢谢!



    HTTP实现长连接

    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:

    ConnectionKeep-Alive

    Then, when the server receives this request and generates a response, it also adds a header to the response:

    ConnectionKeep-Alive

    Following this, the connection is NOT dropped, but is instead kept open. When the client sends another request, it uses the same connection. This will continue until either the client or the server decides that the conversation is over, and one of them drops the connection.

    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 ConnectionKeep-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 alivedoesn’t change that. Additionally, there is no guarantee that the client or the server will keep the connectionopen. 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.



    解释1

    所谓长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差,   
    所谓短连接指建立SOCKET连接后发送后接收完数据后马上断开连接,一般银行都使用短连接

    解释2

    长连接就是指在基于tcp的通讯中,一直保持连接,不管当前是否发送或者接收数据。   
    而短连接就是只有在有数据传输的时候才进行连接,客户-服务器通信/传输数据完毕就关闭连接。

    解释3

    长连接和短连接这个概念好像只有移动的CMPP协议中提到了,其他的地方没有看到过。   
    通信方式   
    各网元之间共有两种连接方式:长连接和短连接。所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,即每次TCP连接只完成一对 CMPP消息的发送。   
    现阶段,要求ISMG之间必须采用长连接的通信方式,建议SP与ISMG之间采用长连接的通信方式。

    解释4

    短连接:比如http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。   
    长连接:有些服务需要长时间连接到服务器,比如CMPP,一般需要自己做在线维持。



    最近在看“服务器推送技术”,在B/S结构中,通过某种magic使得客户端不需要通过轮询即可以得到服务端的最新信息(比如股票价格),这样可以节省大量的带宽。
         传统的轮询技术对服务器的压力很大,并且造成带宽的极大浪费。如果改用ajax轮询,可以降低带宽的负荷(因为服务器返回的不是完整页面),但是对服务器的压力并不会有明显的减少。
        而推技术(push)可以改善这种情况。但因为HTTP连接的特性(短暂,必须由客户端发起),使得推技术的实现比较困难,常见的做法是通过延长http连接的寿命,来实现push。
        接下来自然该讨论如何延长http连接的寿命,最简单的自然是死循环法:
        【servlet代码片段】
         public void doGet(Request req, Response res) {
              PrintWriter out = res.getWriter();
              ……
              正常输出页面
              ……
              out.flush();
              while (true) {
                    out.print("输出更新的内容");
                    out.flush();
                    Thread.sleep(3000);
              }
          }
         如果使用观察者模式则可以进一步提高性能。
         但是这种做法的缺点在于客户端请求了这个servlet后,web服务器会开启一个线程执行servlet的代码,而servlet由迟迟不肯结束,造成该线程也无法被释放。于是乎,一个客户端一个线程,当客户端数量增加时,服务器依然会承受很大的负担。
         要从根本上改变这个现象比较复杂,目前的趋势是从web服务器内部入手,用nio(JDK 1.4提出的java.nio包)改写request/response的实现,再利用线程池增强服务器的资源利用率,从而解决这个问题,目前支持这一非J2EE官方技术的服务器有GlassfishJetty(后者只是听说,没有用过)。
         目前也有一些框架/工具可以帮助你实现推功能,比如pushlets。不过没有深入研究。
         这两天准备学习一下Glassfish中对Comet(彗星:某人给服务器推送技术起的名字)的支持,呵呵。

    展开全文
  • TCP长连接和短连接

    千次阅读 2018-07-26 16:53:14
    TCP长连接和短连接是什么 TCP短连接就是在三次握手和四次挥手之间客户端和服务器端只进行一次读写操作,一次读写完成双方都可以发起close请求,一般都是客户端先发起close操作。 TCP长连接就是在三次握手和四次...

    TCP长连接和短连接是什么

    TCP短连接就是在三次握手和四次挥手之间客户端和服务器端只进行一次读写操作,一次读写完成双方都可以发起close请求,一般都是客户端先发起close操作。

    TCP长连接就是在三次握手和四次挥手之间客户端和服务器端进行多次读写操作,长时间操作之后client发起close请求。

    TCP长连接和短连接的应用场景

    ⻓连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三次握手,这需要时间,如果每个操作都是先连
    接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,再次处理时直接发送数据包就OK了,不用建立TCP连接。
    例如:数据库的连接用⻓连接,如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

    而像WEB网站的http服务一般都用短链接,因为⻓连接对于服务端来说会耗费一定的资源,像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用⻓连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连接好。

    TCP长连接和短链接的优缺点

    ⻓连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用⻓连接。

    client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些⻓时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大⻓连接数,这样可以完全避免某个客户端连累后端服务。

    短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。

     

    TCP的半连接和全连接队列。syns queue(半连接队列);accept queue(全连接队列)参考这篇文章:

    https://www.cnblogs.com/sidesky/p/6844228.html

    其中还谈到了典型的DOS(拒绝服务)攻击,SYN Flood(TCP半连接攻击)

    展开全文
  • tcp长连接,与服务器端保持长连接,发送心跳包。保持连接。
  • tcp长连接和短连接

    2019-08-21 23:47:36
    tcp长连接和短连接 TCP在真正的读写操作之前,server与client之间必须建立一个连接, 当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接, 连接的建立通过三次握手,释放则需要四次握手, 所以说每个...
  • android 客户端 后台启动服务 保持 TCP 长连接例子。
  • 对于TCP长连接保活是十分必要的,原因如下:  1、系统多在OA网和外网间有防火墙隔离,很多防火墙对一段时间内没有报文活动的socket会自动关闭。  2、对于非正常断开的连接系统并不能侦测到,比如防火墙关闭端口、...
  • TCP长连接和短连接 长连接是指可以实现服务端和客户端之间连续的传输数据,在传输的过程中,连接保持开启,并不中断,数据传输完成后连接不关闭。 短连接是指当服务器端和客户端连接成功后开始传
  • TCP 三次握手/四次挥手,TCP 长连接与短连接TCP 三次握手/四次挥手三次握手四次挥手TCP / IP 状态TCP 长连接与短连接长连接和短连接使用原因HTTP的长连接和短连接TCP长连接TCP—短连接应用场景 TCP 三次握手/四次...
  • 导读tcp长连接和短连接TCP在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立通过三次握手,释放则需要四次握手,所以说每个...
  • TCP长连接与短连接的区别
  • TCP长连接和短连接原理

    千次阅读 2016-07-22 22:47:25
    TCP长连接TCP长连接是说服务端和客户端两边通信的时候,客户端和服务端两边的端口号是固定的,一旦通道开启,就一直处于连接状态,不管客户端和服务端之间有没有数据进行发送,通道都是开启状态。 TCP短连接TCP短...
  • TCP长连接和短连接应用场景 长连接 多用于操作频繁,点对点的通讯,而且连接数不能太多的场景 每个TCP连接都需要三次握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完...
  • 本文继续从网络通信方面来描述如何通过长连接来提升服务性能。 2、为什么长连接可以提升服务性能 在TCP/IP协议中,传输层负责应用程序之间的网络通信数据的传输,传输层协议主要有UDP和TCP。UDP协议是面向无连接的
  •  对于TCP长连接保活是十分必要的,原因如下:  1、系统多在OA网和外网间有防火墙隔离,很多防火墙对一段时间内没有报文活动的socket会自动关闭。  2、对于非正常断开的连接系统并不能侦测到,比如防火墙关闭...
  • 在开发过程中,我们经常会用到TCP/IP连接实现即时数据传输,下面这篇文章主要给大家介绍了关于Android端TCP长连接的性能优化的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧...
  • TCP长连接与NAT超时

    2021-02-06 13:07:25
    TCP长连接 TCP连接建立后只要不关闭,逻辑上连接一直存在。 TCP是有保活定时器的,可以打开保活定时器来维持长连接,设置SO_KEEPALIVE才会开启,时间间隔默认7200s,也就是2h,这个默认是关闭的。 HTTP中的keep-...
  • TCP长连接和短连接的区别

    万次阅读 2019-02-27 09:53:51
    TCP长连接和短连接的区别  当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的...
  • nginx 代理tcp长连接短连接配置

    万次阅读 2017-12-29 16:18:38
    nginx使用ngx_stream_core_module模块代理tcp长连接短连接,可以增强服务器的容灾能力 下面是一个配置信息,自己也方便记录一下
  • python进阶教程网络编程-tcp长连接和短连接tcp长连接和短连接TCP在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立通过三次...
  • TCP长连接与短连接

    2014-03-31 22:51:00
    1、概念区别  所谓TCP短连接,是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接。... 所谓TCP长连接,是指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没...
  • TCP长连接和短连接 TCP在真正的读写操作之前,server与client之间必须建立一个连接, 当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接, 连接的建立通过三次握手,释放则需要四次握手, 所以说每个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,146
精华内容 3,258
关键字:

tcp长连接