WebSocket学习心得

一、什么是WebSocket

1、WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。

2、WebSocket本质上是一种计算机网络应用层的协议,用来弥补HTTP协议在持久通信能力的不足。

3、WebSocket最大特点是服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

其他特点包括:

1)建立在TCP协议之上,服务器端的实现比较容易。

2)与HTTP协议有良好的兼容性。默认端口也是80和443,并且握手阶段采用HTTP协议,因此握手时不容易屏蔽,能通过各种HTTP代理服务器。

3)数据格式比较轻量,性能开销小,通信高效。

4)可以发送文本,也可以发送二进制数据。

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

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

二、为什么需要WebSocket

HTTP有一个缺陷,即通信只能由客户端发起,不具备服务器推送能力。例如,我们想了解查询今天的实时数据,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP协议做不到服务器主动向客户端推送信息。

这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端想要获知就非常麻烦。只能使用轮询的方式,每隔一段时间就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。轮询的效率低,非常浪费资源。

HTTP协议本身是没有持久通信能力的,但是我们在实际的应用中是很需要这种能力的,所以,为了解决这些问题,WebSocket协议由此而生,于2011年被IEFT定为标准RFC6455,并被RFC7936所补充规范。并且在HTML5标准中增加了有关WebSocket协议的相关api,所以只要实现HTML5标准的客户端就可以与支持WebSocket协议的服务器进行全双工的持久通信。

三、WebSocket与HTTP的区别

相同点:都是一样基于TCP的,都是可靠性传输协议,都是应用层协议。

联系:WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输的时候是不需要HTTP协议的。

不同点:

1、WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息,而HTTP是单向的;

2、WebSocket是需要浏览器和服务器握手进行建立连接的,而HTTP是浏览器发起向服务器的连接。

虽然HTTP/2也具备服务器推送功能,但是HTTP/2只能推送静态资源,无法推送指定的信息。

四、WebSocket连接过程

首先客户端发起HTTP请求,经过3次握手后,建立TCP连接,HTTP请求里存放WebSocket支持的版本好等信息,如:Upgrade、Connection、WebSocket-Version等。

然后服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据。

最后客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信。

五、WebSocket的优缺点

优点:

1、WebSocket协议一旦建立后,互相沟通消耗的请求头是很小的。

2、服务器可以向客户端推送信息。

缺点:少部分浏览器不支持,浏览器支持的程度与方式有区别(IE10)。

六、WebSocket应用场景

1、即时聊天通信

2、多玩家游戏

3、在线协同编辑

4、实时数据流的拉取与推送

5、体育/游戏实况

6、实时地图位置

七、WebSocket维持连接

WebSocket可以建立心跳机制维持连接,所谓心跳机制,就是定时发送一个数据包,让对方知道自己在线且正常工作,确保通信有效。如果对方无法响应,便可以弃用旧连接建立新连接了。

需要重连的场景可能包括:网络问题或者机器故障导致连接断开、连接没断但不可用了或者连接对端的服务不可用了等等。

发送方->接收方:ping

接收方->发送方:pong

ping、pong的操作,对应的是WebSocket的两个控制帧,Opcode分别是0x9、0xA。比如说,WebSocket服务端向客户端发送ping:

// ping

wx.ping();

// pong

ws.on('pong',()=>{

        console.log("pong received");

});

客户端也可以发送:

// 发送心跳包

ws.send('heart check');

// 接收响应

ws.onmessage = (e)  =>{

        const response = e.data;

        if(response.message === 'connection alive'){

                // 重置计时器

        }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值