websocket介绍
websocket是一种在单个TCP连接上进行全双工通信的协议。
理解:
什么是全双工通信 ?
全双工是一种通信传输的术语,通信允许数据在两个方向上同时传输, 在能力上算是两个单工通信的结合。 全双工指可以同时进行信号的双向传输 (A->B) (B->A) 这里的意思是A到B传递 或是B到A传递 都是瞬时同步的 全双工允许我们让两个用户都可以互相发送消息并且消息都是瞬时同步
什么是单工通信?
单工通信就是例如有A和B两个用户 单工只允许A向B发送消息 而B不能向A发送消息
什么是半双工通信?
是指一个时间段内只允许A向B发信息,而另一个时间只允许B向A发信息 这种方式是通过时间段的组合来完成双向通信
举个例子
全双工: 手机打电话 半双工: 对讲机 单工: 广播,音响,家庭影院
现在的即时通信实现分别
短轮询 长轮询 SSE Websocket
短轮询:
一种客户端与服务器之间的通讯方式 客户端会定期向服务器发送请求,来检查是否有新消息,如果没有则返回一个空响应。 但是他的缺点是客户端发送的请求频率比较高,这可能会导致网络拥塞和服务器过载过高 例子: 社交软件通过短轮询实现聊天功能是否有新消息的显示
长轮询:
长轮询是一种改进的轮询方式,其中客户端发送一个请求并保持连接打开, 直到服务器有新消息可用或连接超时。这种方法减少了不必要的请求, 但仍然需要发送大量的http请求 仍然没有很好的解决短轮询的问题 算是一种优化 例子: 在游戏中,玩家通过长轮询来获取其他玩家的实时位置和动作
SSE:
sse是一种单向通信协议,其中服务器可以将消息推送到客户端。与轮询不同。 客户端只需要发送一个请求,服务器可以随时发送接收新消息 这种方法减少了网络流量和服务器负载 很好的解决了轮询的问题 但是 是一个单向通信 例子: 新闻网站使用sse将新闻标题和摘要推送到用户,而无需用户手动刷新页面
WebSocket:
WebSocket是一种双向通信协议,它允许服务器和客户端在连接打开的情况下实时通信。 webSocket减少了网络流量和服务器负载,因为它解决了长短轮询的需要发送大量http请求的问题 还解决了sse只能单向通信的问题 而且WebSocket是可以进行实时通信的 例子:在线会议使用WebSocket实现的实时音频和视频通信,以及像在会议期间共享文档和屏幕
总结
长短轮询是基于HTTP的轮询技术,SSE是一种单向通信技术,而WebSocket是一种双向通信的技术 并且WebSokcet 解决了他们的所有缺点且在优点上更加完美 具有更好的性能和更低的延迟 因此成为通讯的首选技术