spring+tomcat7 + websocket + sock.js消息推送

版权声明:本文为博主原创文章,未经博主允许不得转载。

使用STOMP 的目的,目前还有浏览器不支持websocket ,所有用了STOMP 

1.pom文件添加

	    <!-- web socket 需要的 library -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-websocket</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-messaging</artifactId>
			<version>${spring.version}</version>
		</dependency>

2.添加WebSocketConfig.java 在能被spring扫描到的包下即可

package com.baiying.kkw.util;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

/**
 * 
 * @author DencyCheng
 *
 */
@Configuration
@EnableWebMvc
@EnableWebSocketMessageBroker //能够在 WebSocket 上启用 STOMP
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
 
    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");//订阅地址
        config.setApplicationDestinationPrefixes("/websocket");
    }
 
    public void registerStompEndpoints(StompEndpointRegistry registry) {
    	 //setAllowedOrigins("*") 解决了跨域问题
    	 registry.addEndpoint("/gs-guide-websocket").setAllowedOrigins("*").withSockJS();
    }
 
}

3.添加 WebSocketUtil

package com.baiying.kkw.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Component;

/**
 * 
 * @author DencyCheng
 *
 */
@Component
public class WebSocketUtil {
	@Autowired
	private SimpMessagingTemplate messagingTemplate;

	/**
	 * 发送数据
	 * 
	 * @param url
	 * @param msg
	 */
	public void sendMsg(String url, Object msg) {
		messagingTemplate.convertAndSend(url, msg);
	}

	
}

4.发送数据

        @Autowired
	private WebSocketUtil socketUtil;

        /**
	 * /topic/message 要推送的频道
	 */
	@RequestMapping("/send")
	@ResponseBody
	public void send() {
		socketUtil.sendMsg("/topic/message","拉拉");
	}

5.前台接接收

<%@ page language="java" contentType="text/html;charset=utf-8"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="../css/ydWebLogin.css" />
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/stomp.js/2.3.3/stomp.min.js"></script>
<script src="https://cdn.bootcss.com/sockjs-client/1.0.0/sockjs.min.js"></script>
</head>
<body>
</body>


<script type="text/javascript">
	$(document).ready(function() {
		var socket = new SockJS('${pageContext.request.contextPath}/gs-guide-websocket');
		stompClient = Stomp.over(socket);
		stompClient.connect({}, function(frame) {
			console.log('Connected: ' + frame);
			stompClient.subscribe('/topic/message', function(msg) {
				console.log(msg.body);
				$("body").append("<p>"+msg.body+"</p>");
			});
		});
	});
</script>
</html>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏琦小虾的Binary

CMake学习笔记(三)——以笔者的Robosub竞赛为例

CMake学习笔记(三)——以笔者的Robosub竞赛为例 继笔者认真学习了CMake语法之后,便开始尝试自己用CMake将以前用Qt写的软件框架程序改编为CM...

35410
来自专栏一个会写诗的程序员的博客

《Spring Boot极简教程》第8_章: Spring Boot集成Groovy混合Java开发第8_章: Spring Boot集成Groovy混合Java开发小结

本章我们使用SpringBoot集成Groovy混合Java开发一个极简的RestAPI。 数据库使用mysql,ORM层使用mybatis,模板引擎使用fre...

802
来自专栏石奈子的Java之路

原 SpringBoot 2.0 系列00

2014
来自专栏Hongten

Hibernate中使用memcached

Hibernate-memcached是CacheProvider接口的memcached实现

1862
来自专栏编程坑太多

springboot (八) 文件上传下载

2403
来自专栏mantou大数据

Flume - Kafka日志平台整合

1. Flume介绍 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发...

58710
来自专栏潇涧技术专栏

Gradle Plugin for Android Development User Guide 1

Gradle Plugin for Android Development User Guide (1)

873
来自专栏Java帮帮-微信公众号-技术文章全总结

高级框架-SpringBoot【悟空教程】

Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品。无需开发重量级的 Enterp...

4192
来自专栏乐沙弥的世界

Oracle cloud control 12c 如何修改sysman密码

    前阵子在虚拟机部署了Oracle Cloud Control 12c,事别几日,竟然忘记了登陆密码。主要是因为现在的Oracle有关的Software...

811
来自专栏程序猿DD

Why Spring Boot

本文介绍将各种Spring的配置方式,帮助您了解配置Spring应用的复杂性。 Spring是一个非常受欢迎的Java框架,它用于构建web和企业应用。不像许多...

4277

扫码关注云+社区

领取腾讯云代金券