[websocket]连接学习

一、什么是WebSocket?

WebSocket是一种客户端与服务器实现双向实时通讯的网络协议。(基于TCP的连接机制)

二、建立Websocket的流程原理

1.握手阶段:WebSocket连接初始阶段是握手阶段,客户端通过http请求方式向服务器发送连接请求,请求包括WebSocket协议版本号,和握手密匙等信息。服务器接收到请求后会进行验证,验证成功后会返回一个101状态码 表示握手成功,并将协议升级为WebSocket.

2.连接建立:握手成功后,客户端和服务器之间的WebSocket连接建立。客户端和服务器都可以通过Send方法发送消息,通过OnMessage事件来接收消息。这种双向通信的特性使得实时数据的传输成为可能。

3.数据传输:客户端和服务器通过WebSocket协议来传输消息,客户端通过send方法向服务器发送数据消息,服务器可以通过send方法向客户端发送消息,或者也可以通过广播等方式向所有客户端发送消息,客户端通过OnMessage事件接收消息。

4.保持连接:WebSocket连接是持久化的,与传统的http请求不同,它不需要每次请求都建立连接和断开连接,而是通过一次我售后保持连接,并可以长时间保持打开状态,这样可以减少网络的开销和延迟,并且可以随时进行双向通信。

5.断开连接:当客户端或服务端需要关闭连接时,可以通过close方法来关闭连接。在关闭连接之前,可以发送close帧来告诉对方即将关闭连接。客户端和服务器可以通过OnClose事件来监听连接的关闭事件。

三、WebSocket应用场景

在线聊天,即时会议,协同编辑等环境下应用。

四、Websocket之前的世界

1.轮询:客户端定期向服务器发送请求。询问是否有新的数据可以用,服务端在接收请求后检查是否有更新的数据,并将其返回给客户端,缺点是产生大量的请求和响应,造成不必要的网络开销和延迟。

2.长轮询:在轮询的基础上做出的改进,在客户端发送请求后,保持连接打开一段时间,等待有新数据后立即响应后再关闭连接,虽然减少了无效连接的数量,但是还是依然有大量的建立和关闭连接。

3.Comet:Comet和长轮询一样是基于HTTP的技术,和长轮询不同的是,它在数据响应后依然能保持连接,它的核心思想就是保持长连接来模拟实时通信,并允许服务器通过流式传输或frame(数据帧)等推送技术来主动向客户端推送数据,不过Comet虽然可以模拟实时通信,但它仍然是基于http的模型,在Comet中,服务器向客户端推送数据的方式还是通过延长响应或使用推送技巧来实现的

五、WebSocket的优势

双向实时通信:允许在单个、长时间的连接上进行双向实时通信。在需要快速实时更新的应用程序里,比Http更加高效。

降低延迟:连接一旦建立便会保持开放,数据可以在客户端和服务器之间比Http更低的延迟进行传输。

更高效的资源利用:可以减少重复请求和相应的开销,因为它的连接只需要建立一次。

六、如何建立WebSocket连接

建立连接:websocket的建立需要通过http发送一次常规的 Get请求,并在请求头上带上Upgrade (协议升级)告诉服务器,我想要从http升级成WebSocket 连接就建立成功了,之后服务端和客户端双方便可随时向彼此发送信息。

WebSocket的心跳机制,为了保持WebSocket稳定的长连接,在连接建立之后,服务器和客户端之间通过心跳包来保持连接状态,以防止连接因为长时间没有数据传输而被切断。

心跳包是一种特殊的数据包,不包含任何实际数据,仅用来维持连接状态。

心跳包是一个空数据帧,定期发送,确保连接仍然有效,避免长时间没有数据传输而被中断

通常情况下,心跳包由客户端和服务器端定期发送一个空的数据帧,以确保双方之间的连接仍然有效,避免因为长时间没有数据传输而断开。

七、WebSocket的限制

不提供加密功能,如果有安全上的需求,需采用其他方式来确保安全性,如:SSL协议,设置黑白名单

不支持古老的浏览器,不支持IE10以前的版本。需要使用AJAX或者其他方式来进行替代

优化很重要,保持长连接需要服务器不断的维护和处理连接状态,需要优化性能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值