传智博客
快捷导航
蚂蚁部落
蚂蚁部落 网站首页 前端教程 HTML5 API 查看内容

栏目导航

WebSocket 用法详解

2017-11-9 11:32| 发布者: admin| 查看: 482| 评论: 0|来自: 蚂蚁部落

传智播客

HTTP协议规定,在浏览器客户端发起一个请求,会得到服务器的一个响应,比如在浏览器输入本站的链接,就可以在浏览器显示对应的页面内容,主动方永远是客户端,也就是只有客户端首先发起请求,然后才是服务器端产生响应。如果对信息的实时性要求较高,HTTP协议很难满足需求,比如实时更新的彩票信息(只有客户端发送请求后,才能看到当前最新消息,无法主动更新)。

HTTP缺点如下:
(1).只能由客户端发起请求,服务器然后给出一个响应,实时性差。

(2).http数据包的头部数据量往往很大,可能真正需要的数据很小,浪费带宽。

一.解决方案:

(1).轮询(Polling):

轮询是每隔指定的时间,客户端向服务器端发送get请求。无论服务器端是否有新的信息,客户端都会发起请求,如果客户端精确的知道服务器交付信息的时间间隔,那么此方案还是可以的,否则效率非常的低,浪费资源。

模拟场景如下:

客户端:请问有没有新的信息。

服务器:没有。

客户端:请问有没有新的信息。

服务器:没有。

客户端:请问有没有新的信息。

服务器:没有。

客户端:请问有没有新的信息。

服务器:有信息,给你。

客户端:请问有没有新的信息。

服务器:没有。

如此往复下去。

(2).长轮询(LongPolling):

此方式是上一种方式的改进,首先客户端发送get请求,如果服务器端有新的数据需要传送,就立即把数据发回给客户端,客户端收到数据后,立即再发送Get请求给服务器端;如果服务器端没有新的数据需要发送,这里与Polling方法不同的是,服务器不是立即发送回应给客户端,而是把这个请求保持住,等待有新的数据到来时,再来响应这个请求;如果服务器的数据长期没有更新,一段时间后,这个Get请求就会超时,客户端收到超时消息后,再立即发送一个新的Get请求给服务器。此方式在一定程度上减小了网络带宽和CPU利用率,但是仍然具有HTTP请求本身所具有的缺点。

模拟场景如下:

客户端:请问有没有新的信息,如果现在没有的话我可以等下去

服务器:(等待若干时间后)终于有新信息了,给你。

客户端:请问有没有新的信息,如果现在没有的话我可以等下去

服务器:(等待若干时间后)终于有新信息了,给你。

如此往复下去。

二.WebSocket简介:

最大特点是允许服务器端与客户端进行真正的全双工(full-duplex)通信,也就是服务器可以主动向客户端推送信息,客户端也可以向服务器发送信息。

特别总结如下:

(1).头部数据小,采用轻量级数据格式,通信效率高。

(2).发送的内容格式可以是文本也可以是二进制数据。

(3).建立在 TCP 协议之上。

(4).没有同源限制,客户端可以与任意服务器通信。

(5).协议标识符是ws,如果加密,则为wss,服务器网址就是URL:

[JavaScript] 纯文本查看 复制代码运行代码
wss://echo.websocket.org

三.WebSocket握手:

关于WebSocket握手可以参阅WebSocket握手一章节。

四.WebSocket API:

关于相关API的介绍可以参阅WebSocket API一章节。

五.WebSocket代码实例:

关于webSocket具体演示参阅WebSocket 代码实例一章节。


鲜花

握手

雷人

路过

鸡蛋

最新评论

关于我们|手机版|小黑屋| ( 鲁ICP备10022556号-3 )

GMT+8, 2017-11-19 20:21 , Processed in 0.065650 second(s), 22 queries .

Powered by Discuz! X3.2 Licensed

Copyright © 2012-2017 Design: 蚂蚁部落

返回顶部