消息推送---webSocket

消息推送常见方式

轮询

浏览器以指定的时间间隔向服务器发出HTTP请求,服务器实时返回数据给浏览器。 有数据响应,没有数据响应空数据。

长轮询

浏览器发现ajax请求之后,服务器端接收到请求后,会阻塞请求直到有数据或者超时才返回。

SSE(server-sent event)服务发送事件

  • SSE在服务器和客户端之间打开了一个单向通道。
  • 服务端响应的不再是一次性数据包,而是text/event-stream类型的数据流信息。
  • 服务器有数据变更时将数据流式传输到客户端

WebSocket

一种基于TCP连接上进行全双工通信的协议。 浏览器可以主动传输数据给服务器,服务器也可以主动传输数据给浏览器。

  • 全双工:允许数据在两个方向上同时传输
  • 半双工:允许数据在两个方向上传输,但是同一个时间段内只允许一个方向上的传输。

通过WebSocket 实现在线聊天室

聊天室b站

需要通过HTTP发送一次常规的Get请求。并在请求头中带上upgrade:WebSocket(目的:将HTTP请求升级为WebSocket请求)。这样连接就升级成为了WebSocket连接。

为什么需要心跳机制?

为了保持web Socket 稳定的长连接,在连接建立之后,服务器和客户端之间通过心跳包来保持连接状态,以防止连接因为长时间没有数据传输而被切断。如果在一段时间没有收到对方的心跳包,就可以认为连接已经断开。

心跳包:一种特殊的数据包,不包含任何实际的数据,仅仅用来维持连接状态。定期发送,确保连接仍然有效,避免长时间没有数据传输而被中断。

缺点

不提供解密功能

  • 如果有安全上的需求,需采用其他方式来确保安全性,如:SSL协议、设置黑白名单等。
  • 不支持古老浏览器。需要采用AJAX替代。
  • 保持长连接需要服务器不断地维护和处理连接状态,需要优化性能。

WebSocket 实现消息推送

blog.csdn.net/qq_42402854...

相关推荐
cynicme4 小时前
力扣3318——计算子数组的 x-sum I(偷懒版)
java·算法·leetcode
青云交5 小时前
Java 大视界 -- Java 大数据在智能教育学习效果评估与教学质量改进实战
java·实时分析·生成式 ai·个性化教学·智能教育·学习效果评估·教学质量改进
崎岖Qiu5 小时前
【设计模式笔记17】:单例模式1-模式分析
java·笔记·单例模式·设计模式
Lei活在当下6 小时前
【现代 Android APP 架构】09. 聊一聊依赖注入在 Android 开发中的应用
java·架构·android jetpack
不穿格子的程序员6 小时前
从零开始刷算法-栈-括号匹配
java·开发语言·
lkbhua莱克瓦246 小时前
Java练习-正则表达式 1
java·笔记·正则表达式·github
yue0086 小时前
C#类继承
java·开发语言·c#
凯芸呢7 小时前
Java中的数组(续)
java·开发语言·数据结构·算法·青少年编程·排序算法·idea
竹竹零7 小时前
JacksonUtil--序列化与反序列化
java·开发语言·windows
钱多多_qdd7 小时前
基础篇:IoC(三):Bean实例化策略InstantiationStrategy
java·spring