【WebSocket】学习总结
实时的、双向的;
通过单一的TCP提供了持久化连接;
优势:
实时、双向、可以减少网络的负载;
劣势:
需要客户端和服务端双方都支持;
连续地保持连接需要占用一些内存和CPU资源;
安全问题:安全性显著弱于同等配置的HTTP/REST API(因长连接的特性放大攻击面),需要组合使用WSS+Origin校验+消息认证+内容过滤实
基本概念:
基于TCP协议;
客户端发送一个WebSocket连接请求,之后服务端也反馈一个协议响应以确认要求。在这个握手期间,客户端和服务端会协商好使用的协议版本、支持的子协议、支持的扩展选项等等。握手完成后,连接会保持打开的状态。支持的文件数据格式包括了二进制数据和文本数据。
特点就是实时、双向、可靠、持久。
用于在线游戏、实时聊天。
生命周期:
连接建立:客户端发送一个请求,服务端响应一个握手,然后连接就建立了;
⬇
连接开放:连接建立并且开放,客户端和服务端之间可以相互发送数据;
⬇
连接关闭:可以是被服务端或者客户端发起的一个关闭帧来关闭连接;
⬇
连接关闭完成:WebSocket的连接完全关闭。
注意:WebSocket连接在任何时候都有可能关闭,如遇网络故障、服务端崩溃。
消息格式:
文本或二进制数据;
消息构成是消息头+消息体。
性能:
双向通信性能更好:使用单一的TCP连接;
更小的网络流量:与HTTP相比,WebSocket的协议需要更少的网络流量维护连接,因为它不需要再每个请求/响应交换中发送头部信息;
更低的延迟:WebSocket协议允许服务器主动向客户端推送消息,而不需要客户端先发送消息;
更好的服务端资源管理:WebSocket可以保持持续活动的连接状态,服务端可以更好地管理客户端的连接,减少服务端的开销和处理时间。
如何优化WebSocket的性能:
减少消息的大小:WebSocket传输的数据大小对性能有很大的影响,尽可能使用二进制传输协议来代替文本传输,或者用压缩算法对消息进行压缩;
使用CDN(内容分发网络)加速:可以将静态资源缓存到离用户更近的节点上,提高传输速度和性能,CDN可以缓存WebSocket的初始握手,避免不必要的网络延迟;
使用负载均衡:通过使用负载均衡实现分配并平衡多个服务器的负载,避免单个服务器过载,同时也提高了服务的伸缩性;
优化服务端代码:WebSocket服务端代码的性能时关键因素,使用高效的框架和算法可以减少资源占用而提升速度;
避免网络阻塞:WebSocket会受到网络阻塞的影响,当有太多的数据连接同时请求时,服务器性能会下降,使用更合适的线程池和异步IO操作可以避免线程阻塞,提高WebSocket的并发性能。
本文是个人对于
万字详解,带你彻底掌握 WebSocket 用法(至尊典藏版)写的不错_websocket用法-CSDN博客
的学习总结。