云计算-http实时通讯

时间:2024-01-21 11:18:44

短链接

请求示例

云计算-http实时通讯_长连接

在HTTP/1.0中,默认使用的是短连接。如果需要使用长连接:通过Connection:Keep-alive来实现长连接。浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话

短链接操作步骤:

建立链接数据传输关闭链接

优点:服务器来说管理较为简单,存在连接都是有用的连接

缺点:频繁的建立链接和关闭浪费时间

适用场景:用户量巨大的web网站

每一次都是重新连接请求

长连接

请求示例

云计算-http实时通讯_服务器_02

HTTP1.1协议默认使用的是长连接,如果需要使用短连接Connection:close。在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。

假如在空闲时间内,再次使用此连接,则连接仍然有效,使用完之后,重新计时间,空闲时间到期之后过期

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

开启Keep-Alive的优缺点:

优点:Keep-Alive模式更加高效,因为避免了连接建立和释放的开销。

缺点:长时间的Tcp连接容易导致系统资源无效占用,浪费系统资源。

适用于场景:用于操作频繁,点对点的通讯,而且连接数不能太多,连接数越多对服务器的压力越大

解决方案:关闭长时间没有读写操作的连接(设置连接时间),或者限制客户端最大连接数(设置连接数)

使用telnet模拟http短连接与长连接

telnet www.baidu.com

短连接

云计算-http实时通讯_客户端_03

长连接

云计算-http实时通讯_客户端_04

短轮询

请求示例

云计算-http实时通讯_客户端_05

由客户端每隔一段时间,向服务器发起一次http请求,服务器查询接口是否有数据更新,若有则返回最新数据,没有则提示客户端没有最新数据

如:获取库存数量,不停的请求服务器,如果客户端多了,对于服务器的压力很大

云计算-http实时通讯_长连接_06

优点:客户端和服务器端实现都比较简单

缺点:请求间隔小,则频繁请求,无用请求多,浪费网络带宽和服务器资源

请求间隔大,则信息时效性一般

长轮询

请求示例

云计算-http实时通讯_长连接_07

客户端向服务器发出一个设置较长网络超时时间的http请求,并且在Http连接超时前,不主动断开连接;等待客户端超时或有数据返回后,再次建立一个同样的Http请求

如:

客户端向服务器发送请求,超时时间为30s;

30s内服务器库存有数据变化,则返回数据,并且服务器端断开连接

没有库存数据更新,不会立即返回数据给客户端,30s后客户端超时会主动断开连接,然后客户端将重新建立一个新的http连接,重复上述操作

示例

云计算-http实时通讯_服务器_08

标红的就是没有数据改变被阻塞挂起请求

将请求挂起会导致资源的浪费,当客户端请求多了,服务器端挂起的线程不停的检测数据库也有问题

长轮询短轮询不适用客户端数据量过多的情况。

优点:有数据更新时,能比较及时的响应

没有新数据更新时,服务端会保持连接直到超时,请求相对少,节省网络带宽

缺点:服务器端需要保持 HTTP 连接,消耗一定的资源

服务器端数据变更频繁时,请求也会变得频繁

返回数据顺序无保证,难于管理维护