精华内容
下载资源
问答
  • 长连接是指程序之间的连接在建立之后,就一直打开,被后续程序重用。使用长连接的初衷是减少连接的开销,尽管MySQL的连接比其他数据库要快得多。以PHP程序为例,当收到一永久连接的请求时,PHP将检查是否已...

    什么是短连接?

    短连接是指程序和数据库通信时需要建立连接,执行操作后,连接关闭。短连接简单来说就是每一次操作数据库,都要打开和关闭数据库连接,基本步骤是:连接 →数据传输 →关闭连接。

    什么是长连接?

    长连接是指程序之间的连接在建立之后,就一直打开,被后续程序重用。使用长连接的初衷是减少连接的开销,尽管MySQL的连接比其他数据库要快得多。

    以PHP程序为例,当收到一个永久连接的请求时,PHP将检查是否已经存在一个(前面已经开启了的)相同的永久连接。如果存在,则将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。

    从客户端的角度来说,使用长连接有一个好处,可以不用每次创建新连接,若客户端对MySQL服务器的连接请求很频繁,永久连接将更加高效。对于高并发业务,如果可能会碰到连接的冲击,推荐使用长连接或连接池。

    从服务器的角度来看,情况则略有不同,它可以节省创建连接的开销,但维持连接也是需要内存的。如果滥用长连接的话,可能会使用过多的MySQL服务器连接。现代的操作系统可以拥有几千个MySQL连接,但很有可能绝大部分都是睡眠(sleep)状态的,这样的工作方式不够高效,而且连接占据内存,也会导致内存的浪费。

    对于扩展性好的站点来说,其实大部分的访问并不需要连接数据库。如果用户需要频繁访问数据库,那么可能会在流量增大的时候产生性能问题,此时长短连接都是无法解决问题的,所以应该进行合理的设计和优化来避免性能问题。

    如果客户端和MySQL数据库之间有连接池或Proxy代理,一般在客户端推荐使用短连接。对于长连接的使用一定要慎重,不可滥用。如果没有每秒几百、上千的新连接请求,就不一定需要长连接,也无法从长连接中得到太多好处。在Java语言中,由于有连接池,如果控制得当,则不会对数据库有较大的冲击,但PHP的长连接可能导致数据库的连接数超过限制,或者占用过多的内存。

    对此,研发工程师、系统运维工程师、DBA需要保持沟通,确定合理的连接策略,千万不要不假思索就采用长连接。

    全部使用长连接后,你可能会发现,有些时候 MySQL 占用内存涨得特别快,这是因为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断开的时候才释放。所以如果长连接累积下来,可能导致内存占用太大,被系统强行杀掉(OOM),从现象看就是 MySQL 异常重启了。怎么解决这个问题呢?

    解决方案:

    1. 定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。

    2. 如果你用的是 MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

    个人总结:

    长连接主要用于在少数客户端与服务端的频繁通信,因为这时候如果用短连接频繁通信常会发生Socket出错,并且频繁创建Socket连接也是对资源的浪费。

    但是对于服务端来说,长连接也会耗费一定的资源,需要专门的线程(unix下可以用进程管理)来负责维护连接状态。

    总之,长连接和短连接的选择要视情况而定。

    1、在频繁的与数据库服务通信,并且又非高并发的情况下,使用长连接更合适;

    2、太多持久连接,大部分是sleep状态的,或者系统是高并发的,使用短连接更合适。

    展开全文
  • 主要的过程是浏览器先和服务端建立一TCP连接,然后如果一段时间内没有数据传送给服务端,浏览器便发送TCP Keep-Alive包给服务端,服务端一段时间后便会关闭其到浏览器之间连接,另外可以看到,浏览器是不会主动...

    打开百度是长连接还是短链接

    HTTP1.1开始,都默认使用长连接,除非在connection字段设置close。
    wireshark实验发现,打开百度是长连接。
    主要的过程是浏览器先和服务端建立一个TCP连接,然后如果一段时间内没有数据传送给服务端,浏览器便发送TCP Keep-Alive包给服务端,服务端一段时间后便会关闭其到浏览器之间的连接,另外可以看到,浏览器是不会主动关闭其到服务器端的连接的,因此服务端最后会发送RST来强制结束这段TCP连接。
    另外可以看到浏览器与服务器同时建立了三条TCP连接通道。
    在这里插入图片描述
    另外,wireshark是如何判断是keepalive包的哪,观察可以看到keepalive包的序列号比前一个包的序列号小一,从而判断其为keepalive包。

    第一次用wireshark抓包,如有错误,欢迎指出。

    展开全文
  • 在 HTTP/1.x 里有多种模型:短连接, 长连接, 和 HTTP 流水线。 短连接模型 HTTP 的传输协议主要依赖 TCP 提供从客户端到服务器之间的连接。早期 HTTP 使用一简单模型来处理这样的连接。这些连接的生命周期是短暂...

    打开和保持连接影响网站和 Web 应用程序性能。在 HTTP/1.x 里有多种模型:短连接, 长连接, 和 HTTP 流水线。

    短连接模型

    HTTP 的传输协议主要依赖 TCP 提供从客户端到服务器端之间的连接。早期 HTTP 使用一个简单模型来处理这样的连接。这些连接的生命周期是短暂的:每发起一个请求时都会创建一个新的连接,并在收到应答时立即关闭。

    这个简单的模型对性能有先天限制:打开每个 TCP 连接都相当耗费资源。客户端和服务器端之间需要交换好多消息。当请求发起时,网络延迟和带宽都会对性能造成影响。现代浏览器往往要发起很多次请求(十几个或更多)才能拿到所需的完整信息,证明了这个早期模型的效率低下。

    于是 HTTP/1.1 诞生俩新模型。首先是

    长连接模型

    它会保持连接去完成多次连续的请求,减少不断重新打开连接的时间。然后是

    HTTP 流水线模型

    它还要更先进一些,多个连续的请求甚至都不用等待立即返回就可以被发送,这样就减少了耗费在网络延迟上的时间。

    HTTP/2 新增了其它连接管理模型。

    HTTP 的连接管理适用于两个连续节点之间的连接,如 hop-by-hop,而不是 end-to-end。当模型用于从客户端到第一个代理服务器的连接和从代理服务器到目标服务器之间的连接时(或者任意中间代理)效果可能是不一样的。HTTP 协议头受不同连接模型的影响,比如 Connection 和 Keep-Alive,就是 hop-by-hop 协议头,它们的值是可以被中间节点修改的。

    一个相关的话题是HTTP连接升级,在这里,一个HTTP/1.1 连接升级为一个不同的协议,比如TLS/1.0,Websocket,甚至明文形式的HTTP/2。

    短连接

    HTTP 最早期的模型,也是 HTTP/1.0 的默认模型,是短连接。每一个 HTTP 请求都由它自己独立的连接完成;这意味着发起每一个 HTTP 请求之前都会有一次 TCP 握手,而且连续不断。

    TCP 协议握手本身就耗费时间,所以 TCP 可以保持更多的热连接来适应负载。短连接破坏了 TCP 具备的能力,新的冷连接降低了其性能。

    这是 HTTP/1.0 的默认模型(如果没有指定 Connection 协议头,或者是值被设置为 close)。而在 HTTP/1.1 中,只有当 Connection 被设置为 close 时才会用到这个模型。

    除非是要兼容一个非常古老的,不支持长连接的系统,没有一个令人信服的理由继续使用这个模型。

    长连接

    短连接有两个比较大的问题:

    • 创建新连接耗费的时间尤为明显
    • TCP 连接的性能只有在该连接被使用一段时间后(热连接)才能得到改善

    为了缓解这些问题,长连接便被设计,甚至在 HTTP/1.1 之前。或者这被称之为一个 keep-alive 连接。

    一个长连接会保持一段时间,重复用于发送一系列请求,节省了新建 TCP 连接握手的时间,还可以利用 TCP 的性能增强能力。当然这个连接也不会一直保留着:连接在空闲一段时间后会被关闭(服务器可以使用 Keep-Alive 协议头来指定一个最小的连接保持时间)。

    缺点

    长连接也还是有缺点的:
    就算是在空闲状态,它还是会消耗服务器资源,而且在重负载时,还有可能遭受 DoS attacks 攻击。这种场景下,可以使用非长连接,即尽快关闭那些空闲的连接,也能对性能有所提升。

    HTTP/1.0 里默认并不使用长连接。把 Connection 设置成 close 以外的其它参数都可以让其保持长连接,通常会设置为 retry-after。

    在 HTTP/1.1 里,默认就是长连接的,协议头都不用再去声明它(但我们还是会把它加上,万一某个时候因为某种原因要退回到 HTTP/1.0 呢)。

    HTTP 流水线

    HTTP 流水线在现代浏览器中并不是默认被启用的:

    • Web 开发者并不能轻易的遇见和判断那些搞怪的代理服务器的各种莫名其妙的行为。
    • 正确的实现流水线是复杂的:传输中的资源大小,多少有效的 RTT 会被用到,还有有效带宽,流水线带来的改善有多大的影响范围。不知道这些的话,重要的消息可能被延迟到不重要的消息后面。这个重要性的概念甚至会演变为影响到页面布局!因此 HTTP 流水线在大多数情况下带来的改善并不明显。
    • 流水线受制于 HOL 问题。
      由于这些原因,流水线已经被更好的算法给代替,如 multiplexing,已经用在 HTTP/2。

    默认情况下,HTTP 请求是按顺序发出的。下一个请求只有在当前请求收到应答过后才会被发出。由于会受到网络延迟和带宽的限制,在下一个请求被发送到服务器之前,可能需要等待很长时间。

    流水线是在同一条长连接上发出连续的请求,而不用等待应答返回。这样可以避免连接延迟。理论上讲,性能还会因为两个 HTTP 请求有可能被打包到一个 TCP 消息包中而得到提升。就算 HTTP 请求不断的继续,尺寸会增加,但设置 TCP 的 MSS(Maximum Segment Size) 选项,仍然足够包含一系列简单的请求。

    并不是所有类型的 HTTP 请求都能用到流水线:只有 idempotent 方式,比如 GET、HEAD、PUT 和 DELETE 能够被安全的重试:如果有故障发生时,流水线的内容要能被轻易的重试。

    今天,所有遵循 HTTP/1.1 的代理和服务器都应该支持流水线,虽然实际情况中还是有很多限制:一个很重要的原因是,目前没有现代浏览器默认启用这个特性。

    域名分片

    除非你有紧急而迫切的需求,不要使用这一过时的技术,升级到 HTTP/2 就好了。在 HTTP/2 里,做域名分片就没必要了:HTTP/2 的连接可以很好的处理并发的无优先级的请求。域名分片甚至会影响性能。大多数 HTTP/2 的实现还会使用一种称作连接凝聚的技术去尝试合并被分片的域名。

    作为 HTTP/1.x 的连接,请求是序列化的,哪怕本来是无序的,在没有足够庞大可用的带宽时,也无从优化。一个解决方案是,浏览器为每个域名建立多个连接,以实现并发请求。曾经默认的连接数量为 2 到 3 个,现在比较常用的并发连接数已经增加到 6 条。如果尝试大于这个数字,就有触发服务器 DoS 保护的风险。

    如果服务器端想要更快速的响应网站或应用程序的应答,它可以迫使客户端建立更多的连接。例如,不要在同一个域名下获取所有资源,假设有个域名是 www.example.com,我们可以把它拆分成好几个域名:www1.example.com、www2.example.com、www3.example.com。所有这些域名都指向同一台服务器,浏览器会同时为每个域名建立 6 条连接(在我们这个例子中,连接数会达到 18 条)。这一技术被称作域名分片。

    结论

    改进后的连接管理极大的提升了 HTTP 的性能。不管是 HTTP/1.1 还是 HTTP/1.0,使用长连接 – 直到进入空闲状态 – 都能达到最佳的性能。然而,解决流水线故障需要设计更先进的连接管理模型,HTTP/2 已经在尝试了。

    参考

    • https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Connection_management_in_HTTP_1.x
    展开全文
  • 在使用长连接的情况下,当一网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一保持...

    长连接、短连接、长轮询和WebSocket

    • 长连接:从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
      Connection:keep-alive
      在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

    • 短连接:在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。

    • 长轮询:(我自己的理解)客户端不断发送请求,获取服务器上的数据。在长轮询机制中,客户端像传统轮询一样从服务器请求数据。然而,如果服务器没有可以立即返回给客户端的数据,则不会立刻返回一个空结果,而是保持这个请求等待数据到来(或者恰当的超时),之后将数据作为结果返回给客户端。

    • WebSocket:是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议,客户端发送一次http websocket请求,服务器响应请求,双方建立持久连接,并进行双向数据传输,后面不进行HTTP连接,而是使用TCP连接。

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

    2019-09-27 01:36:58
    短连接 ...当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript...在使用长连接的情况下,当一网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次...
  • http的长连接 短连接

    2020-05-20 20:08:01
    在使用长连接的情况下,当一网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这服务器时,会继续使用这一条已经建立的连接。 长连接可以省去较多的TCP建立和关闭的操作,.
  • HTTP长连接

    2017-02-16 21:33:41
    使用长连接的HTTP协议,会在响应头有加入这行代码:Connection:keep-alive 在使用长连接的情况下,当一网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这服务器上...
  • HTTP的长连接和短连接

    2018-09-20 19:02:25
    长连接:当一网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一保持时间,...
  • 在使用长连接的情况下,当一网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一保持...
  • 长连接是一旦一客户端登陆上服务器,其与服务器之间的连接就不关闭,不管他们之间进行了多少次交易,直到客户端退出登陆或网络出现故障。这种技术在联机交易系统实现有利于提高效率。短连接是客户端每发一请求就...
  • 是一旦一客户端登陆上服务器,其与服务器之间连接就不关闭,不管他们之间进行了多少次交易,直到客户端退出登陆或网络出现故障。这种技术在联机交易系统实现有利于提高效率。 短连接是客户端每发一请求就与...
  • 长连接:当一网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一保持时间,...
  • 长连接3. HTTP 流水线4. 域名分片5. 结论转载 说明 连接管理是一 HTTP 的关键话题:打开和保持连接在很大程度上影响着网站和 Web 应用程序的性能。在 HTTP/1.x 里有多种模型:短连接, 长连接, 和 HTTP 流水线。 ...
  •  从 HTTP/1.1 起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:Connection:... 在使用长连接的情况下,当一网页打开完成后,客户端和服务器之间用于传输HTTP数据的 ...
  • php的运行机制是页面执行完会释放所有该php进程中的所有资源的,如果有多并发访问本地的测试页面 http://127.0.0.1/1.php 根据php跟web服务器的不同,会相应的线程或者进程去处理该请求,请求完了会释放结果的。...
  • PHP的运行机制是页面执行完会释放所有该PHP进程中的所有资源的,如果有多并发访问本地的测试页面 http://127.0.0.1/1.php 根据PHP跟web服务器的不同,会相应的线程或者进程去处理该请求,请求完了会释放结果的。...
  • 长连接:是指程序之间的连接在建立之后,就一直打开,被后续程序重用。 连接池:由于一些数据库创建和销毁连接的开销很大,或者相对于所执行的具体数据操作,连接所耗的资源过多,此时就需要添加连接池改善性能。它...
  • php的运行机制是页面执行完会释放所有该php进程中的所有资源的,如果有多并发访问本地的测试页面 http://127.0.0.1/1.php 根据php跟web服务器的不同,会相应的线程或者进程去处理该请求,请求完了会释放结果的。...
  • Java socket 长连接与短链接

    千次阅读 2014-09-30 15:39:41
    长连接是一旦一客户端登陆上服务器,其与服务器之间的连接就不关闭,不管他们之间进行了多少次交易,直到客户端退出登陆或网络出现故障。 这种技术在联机交易系统实现有利于提高效率。  短连接是客户端每发一...
  • TCP服务器与客户端之间的心跳模块,端口,连接的客户端每隔10秒发送心跳包,服务器收到则证明客户端还在,服务器每隔10秒检测客户接收心跳包。
  • php的运行机制是页面执行完会释放所有该php进程中的所有资源的,如果有多并发访问本地的测试页面 http://127.0.0.1/1.php 根据php跟web服务器的不同,会相应的线程或者进程去处理该请求,请求完了会释放结果的。...
  • 采用这种方式可以实现客户端和服务器之间的通信! 百度百科的解释:  Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一通信链...
  • php的运行机制是页面执行完会释放所有该php进程中的所有资源的,如果有多并发访问本地的测试页面 http://127.0.0.1/1.php 根据php跟web服务器的不同,会相应的线程或者进程去处理该请求,请求完了会释放结果的。...
  • php的运行机制是页面执行完会释放所有该php进程中的所有资源的,如果有多并发访问本地的测试页面 http://127.0.0.1/1.php 根据php跟web服务器的不同,会相应的线程或者进程去处理该请求,请求完了会释放结果的。...
  • http是有保持长连接

    千次阅读 2017-02-03 17:10:22
    从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。  HTTP是一无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。 ...
  • php的运行机制是页面执行完会释放所有该php进程中的所有资源的,如果有多并发访问本地的测试页面 http://127.0.0.1/1.php 根据php跟web服务器的不同,会相应的线程或者进程去处理该请求,请求完了会释放结果的。...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 210
精华内容 84
关键字:

服务器之间开个长连接