看到一篇好文章,特地转载,原文地址:长连接,短连接,长轮询,短轮询,WebSocket一,短连接和长连接短连接:每次Http请求都会建立一个Tcp连接,便于管理。长连接:只需要建立一次Tcp连接,后续的Http请求会复用同一个Tcp连接,管理难度大。HTTP1.1规定默认保持longConnection(HTTP持久连接,又译为持久连接),数据传输完成后,保持TCP连接不断开(不发送RST包,不四次挥手),等待继续使用该通道传输同一域名下的数据;反之如果服务器不告诉客户端超时时间也没关系,服务器可能会主动发起四次挥手断开TCP连接,客户端就可以知道TCP连接无效;另外,TCP还有一个心跳包来检测当前连接是否还活着,方法很多,避免资源浪费。在长连接的应用场景中,客户端一般不会主动关闭它们之间的连接。如果客户端和服务器之间的连接还没有关闭,就会出现问题。随着客户端连接越来越多,服务端迟早处理不了的时候,这时候服务端就需要采取一些策略,比如关闭一些长时间没有发生的连接读写事件,从而避免一些恶意连接导致服务端服务受损;如果条件允许,可以使用客户端机器粒度,限制每个客户端的最大长连接数,这样可以完全防止不良客户端破坏后端服务。长连接和短连接的产生在于客户端和服务端采用的关闭策略。具体的应用场景采用具体的策略。没有完美的选择,只有合适的选择。由于少数client端到server端的频繁通信,例如:数据库连接使用长连接,如果频繁使用短连接通信会导致socket错误,频繁创建socket也是一种浪费的资源。但是像WEB网站这样的http服务一般都使用短链接(追求资源回收的场景),因为长连接会对服务器消耗一定的资源,而WEB网站这样的几万甚至上亿的客户端经常使用短连接对于连接将节省一些资源。2、短轮询和长轮询与短连接和长连接有本质区别。长连接和短连接是在客户端和服务器之间建立和维护TCP连接的机制;而长轮询和短轮询指的是客户端请求服务器,服务器响应的方式。短轮询:重复发送Http请求,检查目标事件是否完成。优点:写法简单。缺点:浪费带宽和服务器资源长轮询:在服务器端持有Http请求(无限循环或睡眠等),等待目标时间发生(保持此请求等待数据到达或适当超时),返回HTTP响应。优点:在没有消息的情况下,不会频繁请求。缺点:写法复杂3、WebSocketWebSocket与HTTP长连接的区别HTTP1.1使用Connection:keep-alive进行长连接,HTTP1.1默认使用长连接。多个HTTP请求可以在一个TCP连接中完成,但每个请求仍然需要发送一个单独的标头。Keep-Alive不会永久保持连接。它有一个保持时间,可以在不同的服务器软件(如Apache)中设置。设置这个时间。websocket的长连接是真正意义上的全双工。第一个tcp链接建立后,后续的数据可以由双方发送而无需发送请求头,这个连接会一直存在,直到其中一个客户端或服务端主动关闭连接。与HTTP长连接不同,WebSocket可以更灵活地控制连接关闭的时机,而不是HTTP协议的Keep-Alive一到,服务器就立即关闭(这很不人道)??。WebSocket连接建立在建立WebSocket连接时,需要通过客户端或浏览器发送握手请求。请求报文示例如图:服务端返回给客户端的响应报文如图:为了建立WebSocket连接,客户端浏览器首先要向服务端发送一条消息InitiateanHTTP要求。这个请求不同于通常的HTTP请求,它包含一些额外的头信息。额外的头信息“Upgrade:WebSocket”表示这是一个协议升级的HTTP请求。服务器端解析这些额外的头信息,然后生成响应消息返回给客户端。客户端和服务器端之间的WebSocket连接建立。双方可以通过这个连接通道自由传输信息,这个连接会一直存在,直到客户端或者服务器端的一方主动关闭连接。请求消息中的“Sec-WebSocket-Key”是随机的,服务器会利用这些数据构造一个SHA-1信息摘要,在“Sec-WebSocket-Key”中加入一个神奇的字符串“258EAFA5-E914”——47DA-95CA-C5AB0DC85B11”。使用SHA-1加密,然后进行BASE-64编码,将结果作为“Sec-WebSocket-Accept”头的值返回给客户端。注:本文为转载,原文地址:长连接、短连接、长轮询、短轮询、WebSocket
