初识websocket

网友投稿 243 2022-08-28

初识websocket

为什么需要websocket?

如果想要回答这个问题,那么需要从HTTP1.0、HTTP1.1、socket、Ajax轮询、Long poll说起~

HTTP 1.0协议

HTTP是一个短连接(非持久化),且通信只能由客户端发起,HTTP协议做不到服务器主动向客户端推送消息。

HTTP协议这种单向请求的特点,注定了如果服务器有连接的状态变化时,客户端要获知就非常麻烦了。我们只能通过‘轮询’-每隔一段时间,就发出一个询问,了解服务器有没有新的信息。效率低、非常浪费资源。HTTP的生命周期通过Response ,那么在HTTP请求就结束了。

DNS域名解析

DNS(Domain Name System)服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。

URL:统一资源定位符

统一资源定位符(Uniform Resource Locator, URL),又叫做网页地址,是互联网上标准的资源的地址(Address),用于描述一个网络上的资源。基本格式为:schema://host[:port]/path/[;url-params][?query-string][#anchor]

Ajax轮询

原理:让浏览器隔几秒钟就发送一次请求,询问服务器是否有新信息。(缺点:需要服务器有很快的处理速度和资源)

Long poll

原理:与ajax轮询原理差不多,都是采用轮询的方式,不过long poll采用的是阻塞模式(即:一直打电话,没收到就不挂电话)。也就是说,客户端发起连接后,如果没消息,就一直不返回response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。(缺点:需要服务器有很高的并发,也就是同时接待客户的能力)

HTTP1.1

在HTTP1.1中进行了改进,支持长连接和请求的流水线处理。使得有一个keep-alive(默认开启Connection:keep-alive),也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。但是请记住HTTP中永远是这样,也就是说一个request只能有一个response。而且这个response也是被动的,不能主动发起。

HTTP1.1是否可以取代websocket?

我一直有一个疑惑:HTTP1.1里面已经有了keep-live,那么HTTP1.1本身就是一个长连接,还需要websocket做什么呢?

答案:需要。原因有以下几点:

开销:HTTP长连接的每次请求仍然需要发送头信息;而websocket仅需要在发送请求时发送头信息。真正意义的长连接:HTTP长连接仅仅是为了复用TCP连接,只是一种口头约定,服务端可以不遵守;而websocket是完全意义上的长连接。是否平等:API中,浏览器和服务器只需要完成一次握手(为了建立一个Websocket连接,客户端首先要向服务器发送一个HTTP请求,这个请求和通常的HTTP请求不同,包含了一些附加头信息,其中附加信息‘Upgrade:Websocket’表明这是一个申请协议升级的HTTP请求,服务器端解析这些附加的头信息然后产生应答信息返回给客户端,客户端和服务器的websocket连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或服务器端的某一方主动的关闭连接。),两者之间就可以直接创建持久性的连接,并进行双向数据传输。

Websocket 特点

Websocket建立在TCP协议之上;握手阶段采用HTTP协议;可以发送文本/二进制数据;数据格式比较轻量,性能开销小,通信高效。协议标识符是ws。例如:ws://example.com:80/some/path解决了轮询造成的同步延迟问题(服务端可以主动推送信息给客户端)解决了服务器需要反复解析HTTP协议,减少了资源的开销(由于websocket只需要一次HTTP握手,服务端就能一直与客户端保持通信,直到关闭连接;且HTTP协议经常头部内容比主体内容还长也比较浪费资源)

python之socket接口测试

pip包:​​https://pypi.org/project/websocket_client/​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:c++ sizeof和strlen
下一篇:金融产品网络营销大扫除!(利用互联网开展金融营销宣传活动)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~