springboot系列文章之集成WebSocket进行广播式消息推送

前言

在springboot整合websocket之前,先简单阐述下websocket的基本概念,以及与它相关的sockjs,stomp又是什么。

WebSocket简介

WebSocket协议是 HTML5新增的一种在单个TCP连接上进行全双工通讯的协议,在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成一条快速通道,两者之间就直接可以数据相互传送了。

WebSocket与HTTP的不同之处在于:

WebSocket是一种全双工通信协议,在建立连接后,WebSocket服务器和浏览器端都能够主动的向对方发送消息,就像Socket一样。而HTTP只能由客户端发起请求,服务器返回查询结果,做不到服务器主动向客户端发送请求,如下图所示

websocket

WebSocket的特点

这里总结下WebSocket的特点:
- WebSocket服务器和浏览器都能够主动向对方发送消息
- 建立在 TCP协议之上,服务器的实现比较容易
- 与HTTP 协议有着良好的兼容性,默认端口也是 80和443,并且握手阶段采用HTTP协议,可以通过HTTP代理
- 数据格式比较轻量,性能开销小,通信高效
- 可以发送文本,也可以发送二进制数据
- 没有同源限制,客户端可以与任意服务器通信
- 协议标识符是 ws(如果加密,则为wss),服务器网址是URL

SockJS

SockJS是一个浏览器上运行的JavaScript库,如果浏览器不支持 WebSocket,该库可以模拟对 WebSocket的支持,实现浏览器和Web服务器之间的低延迟,全双工,跨域的通讯通道

STOMP

STOMP即 Simple(or Streaming) Text Oriented Messaging Protocol 的简称,简单(流)文本定向消息协议,它提供了一个可户操作的连接格式,允许 STOMP 客户端与任意 STOMP消息代理(Broker)进行交互,STOMP协议由于设计简单,易于开发客户端,因此在多种语言和多种平台上得到广泛应用

之前的介绍谈到 WebSocket是基于 TCP协议的,直接使用WebSocket(或者SockJS)来编程就与直接使用TCP套接字来编程web应用类似,这会非常难受,因为没有高层协议,因此就需要我们定义应用间所发送消息的语义,还需要确保连接两端都能遵循这些语义。

那么现在STOMP就派上用场了,同HTTP在TCP套接字上添加请求-响应模型层一样,STOMP在 WebSocket之上提供了一个基于帧的线路格式层,用来定义消息语义

STOMP帧

STOMP帧由命令,一个或多个头消息以及负载所组成,如下所示是一个发送数据的STOMP帧:

   SEND
destination:/app/room-message
content-length:20

{\"message\":\"Hello!\"}

对上面分析如下:
- SEND: STOMP命令,表明会发送一些内容
- destination: 头消息,用来表示消息发送到哪里
- content-length: 头信息,用来表示负载内容的大小
- 空行
- 帧内容(负载)内容

WebSocket、SockJS、STOMP的关系

简单说就是,WebSocket是基于TCP的底层协议,SockJS是WebSocket的备选方案,用于那些不支持WebSocket的浏览器,也是底层协议,而STOMP是 WebSocket的上层协议,是高级协议

SpringBoot整合WebSocket

前面铺垫了一些基础知识过后,下面进入本篇文章的主题,使用SpringBoot+WebSocket+SockJS+STOMP搭建一个广播式的WebSocket

导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

WebSocket配置

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值