关于websocket的理解和它与其他通信方式的区别

简介: 关于websocket的理解和它与其他通信方式的区别

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 解决了他们的所有缺点且在优点上更加完美 具有更好的性能和更低的延迟
  因此成为通讯的首选技术


相关文章
|
1月前
|
前端开发 网络协议 JavaScript
在Spring Boot中实现基于WebSocket的实时通信
在Spring Boot中实现基于WebSocket的实时通信
Server-Sent Events 和 WebSocket 之间有什么区别
Server-Sent Events (SSE) 和 WebSocket 分别代表单向和双向通信机制。SSE,基于 HTTP,仅允许服务器向客户端发送事件流;而 WebSocket 是双向实时通信协议,支持客户端与服务器的双向交互。SSE适合低实时性场景,依赖长轮询或流传输;WebSocket 提供更低延迟,适用于高实时性应用。两者在现代浏览器中普遍被支持,但旧版浏览器或特定网络环境可能影响兼容性。选择哪种机制取决于实际需求,如通信方向、实时性要求及目标浏览器支持。
|
3月前
|
网络协议 JavaScript 前端开发
WebSocket:实现客户端与服务器实时通信的技术
WebSocket:实现客户端与服务器实时通信的技术
|
3月前
|
网络协议 Java Go
【Go语言专栏】Go语言中的WebSocket实时通信应用
【4月更文挑战第30天】Go语言(Golang)是Google开发的编程语言,适用于云计算、微服务等领域。本文介绍了WebSocket,一种实现浏览器与服务器全双工通信的协议,其特点是实时性、全双工和轻量级。在Go中实现WebSocket,可以使用gorilla/websocket库。示例展示了如何创建服务器端和客户端,实现消息的收发。WebSocket广泛应用于聊天、游戏、通知推送和实时数据同步等场景。学习Go语言中的WebSocket对于开发实时通信应用至关重要。
114 0
|
1月前
|
前端开发 JavaScript API
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
【7月更文挑战第17天】现代Web开发趋势中,前后端分离配合WebSocket满足实时通信需求。Django Channels扩展了Django,支持WebSocket连接和异步功能。通过安装Channels、配置设置、定义路由和消费者,能在Django中实现WebSocket交互。前端使用WebSocket API连接后端,实现双向数据流,如在线聊天功能。集成Channels提升Web应用的实时性和用户体验,适应实时交互场景的需求。**
80 6
|
1月前
|
前端开发 Python
前后端分离的进化:Python Web项目中的WebSocket实时通信解决方案
【7月更文挑战第18天】在Python的Flask框架中,结合Flask-SocketIO库可轻松实现WebSocket实时通信,促进前后端分离项目中的高效交互。示例展示了一个简单的聊天应用:Flask路由渲染HTML,客户端通过Socket.IO库连接服务器,发送消息并监听广播。此方法支持多种实时通信协议,适应不同环境,提供流畅的实时体验。
51 3
|
1月前
|
安全 数据安全/隐私保护 UED
优化用户体验:前后端分离架构下Python WebSocket实时通信的性能考量
【7月更文挑战第17天】前后端分离趋势下,WebSocket成为实时通信的关键,Python有`websockets`等库支持WebSocket服务。与HTTP轮询相比,WebSocket减少延迟,提高响应。连接管理、消息传输效率、并发处理及安全性是性能考量重点。使用WebSocket能优化用户体验,尤其适合社交、游戏等实时场景。开发应考虑场景需求,充分利用WebSocket优势。
60 3
|
11天前
|
网络协议 Go
[golang]gin框架接收websocket通信
[golang]gin框架接收websocket通信
|
1月前
|
JavaScript 前端开发 UED
WebSocket在Python Web开发中的革新应用:解锁实时通信的新可能
【7月更文挑战第16天】WebSocket是实现Web实时通信的协议,与HTTP不同,它提供持久双向连接,允许服务器主动推送数据。Python有多种库如websockets和Flask-SocketIO支持WebSocket开发。使用Flask-SocketIO的简单示例包括定义路由、监听消息事件,并在HTML中用JavaScript建立连接。WebSocket提高了实时性、减少了服务器压力,广泛应用于聊天、游戏等场景。
27 1
|
1月前
|
移动开发 前端开发 网络协议
Python Web实时通信新纪元:基于WebSocket的前后端分离技术探索
【7月更文挑战第16天】WebSocket增强Web实时性,Python借助Flask-SocketIO简化实现。安装`flask`和`flask-socketio`,示例展示服务器端接收连接及消息并广播响应,前端HTML用Socket.IO库连接并监听事件。WebSocket开启双向通信新时代,助力动态Web应用开发。
31 1