Spring Boot 集成WebSocket

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}));

 

 

 

转载于:https://my.oschina.net/yangty2017/blog/1490367

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值