Spring Boot 集成WebSocket

Java框架

浏览数:17

2020-6-8

AD:资源代下载服务

Websocket简介

WebSocket为浏览器和服务端提供了双工异步通信的功能,即浏览器可以向服务端发送消息,服务端也可以向浏览器发送消息。WebSocke是通过一个socket来实现双工异步通信。但是直接使用WebSocket协议开发程序显得特别繁琐,可以使用它的子协议STOMP,它是一个更高级的协议,STOMP协议使用一个基于帧的格式来定义消息,与HTTP的request和response类似。

Spring Boot支持

springboot对于内嵌的tomcat7使用websocket提供了支持,配置源码存于:

org.springframework.boot.autoconfigure.websocket

springboot提供的stater pom是spring boot starter websocket

配置开启WebSocket支持

@Configuration

@EableWebSocketMessageBroker

开启websocket支持,使用STOMP协议传输基于代理的消息(message broker),控制器支持@MessageMapping

public class *** extends AbstractWebsocketMessageBrokerConfigurer

//注册STOMP协议的节点(endpoint),并映射的指定的URL,使用SockJS协议

public  void registerStompEndPoints(StompEndPointRegistry registry){

          registry.addEndPoint("/endpointWisely").withSockJS();

           registry.addEndPoint("/endpointChat").withSockJS();

}

配置消息代理(广播式,点对点式)

public void configureMessageBroker(MessageBrokerRegistry registry){

   registry.enableSimpleBroker("/topic","/queue");

}

控制器

浏览器向服务端发送请求,通过@MessageMapping映射的地址

服务端有消息,会对订阅了@sendTo中的路径的浏览器发送消息

@MessageMapping

@SendTo("/topic/getResponse")

服务端通过SimMessageTemplate向浏览器发送消息

通过SimMessageTemplate.convertAndSendUser向用户发送消息,第一个参数是接收消息的用户,第二个参数是浏览器订阅的地址,第三个参数是消息本身

页面

添加脚本到src/main/resources/static下

stomp.min.js(STOMP协议的客户端脚本)

sockjs.min.js(SockJS的客户端脚本)

JQuery

连接SockJS的endpoint

var socket = new SockJS('/endpoint节点');
var socket = new SockJS('/endpointWisely');
var socket = new SockJS('/endpointChat');

使用STOMP子协议的WebSocket客户端

var stompClient = Stomp.over(socket);

连接WebSocket服务端

stompClient.connect

通过websocket客户端stompClient.subscribe订阅广播地址/topic/getResponse目标发送的消息

stompClient.subscribe('/topic/getResponse',function(response){

         showResponse(JSON.parse(response.body).responseMessage);

}

通过stompClient.send向/welcome(@MessageMapping映射地址)发送消息

stompClient.send("/welcome",{},JSON.stringify({'name':name}));

 

 

 

作者:yangty2017