Grails3 websocket消息推送 实时数据

106 篇文章 0 订阅
102 篇文章 2 订阅

 

参考文档

1、依赖

 

grails-spring-websocketGrails
2.2.03.0.10+
2.3.03.1.0+
dependencies {
    compile 'org.grails.plugins:grails-spring-websocket:2.3.0'
}
 

Controller (annotated handler method)

/grails-app/controllers/example/ExampleController.groovy:

package example

import org.springframework.messaging.handler.annotation.MessageMapping
import org.springframework.messaging.handler.annotation.SendTo

class ExampleController {
	
	def index() {}
	
	@MessageMapping("/hello")
	@SendTo("/topic/hello")
	protected String hello(String world) {
		return "hello from controller, ${world}!"
	}
	
}

 

 

 

Client-side (sock.js / stomp.js)

/grails-app/views/example/index.gsp:

<!DOCTYPE html>
<html>
	<head>
		<meta name="layout" content="main"/>
		
		<asset:javascript src="application" />
		<asset:javascript src="spring-websocket" />
		
		<script type="text/javascript">
		 	$(function() { 
				var socket = new SockJS("${createLink(uri: '/stomp')}");
				var client = Stomp.over(socket);
			
				client.connect({}, function() {
					client.subscribe("/topic/hello", function(message) {
						$("#helloDiv").append(message.body);
					});
				});
			
				$("#helloButton").click(function() {
					client.send("/app/hello", {}, JSON.stringify("world"));
				});
			});
		</script> 
	</head>
	<body>
		<button id="helloButton">hello</button>
		<div id="helloDiv"></div>
	</body>
</html>

Rest api 模式(注意要开启跨域模式)

1、

2、

注意:如果加了spring security,需要将 /stomp加入到requestMap里面

html模板

<script src="http://cdn.bootcss.com/sockjs-client/1.1.1/sockjs.min.js"></script>
    <script src="http://cdn.bootcss.com/stomp.js/2.3.3/stomp.js"></script>
    <script src="http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
    <script type="text/javascript">
        $(function() {
            var socket = new SockJS("http://127.0.0.1:8080/message");
            debugger
            var client = Stomp.over(socket);
            client.connect({}, function() {
                //发送消息
                client.send("/app/message",{}, JSON.stringify("test"));
                //监听接收消息
                client.subscribe("/topic/message", function(message) {
                	debugger
                	var msg = message 
                	var msgStr = JSON.parse(message.body)
                	var str = "工厂"+msgStr.factoryId+msgStr.lineId+"产线"+msgStr.stationId+"岗位报警"
                    $("#helloDiv").append(str);
                });
            });

            
	</script>

 

 

Service (brokerMessagingTemplate bean)

You can also inject and use the brokerMessagingTemplate bean to send messages directly, e.g. from a service.

/grails-app/services/example/ExampleService.groovy:

package example

import org.springframework.messaging.simp.SimpMessagingTemplate

class ExampleService {
	
	SimpMessagingTemplate brokerMessagingTemplate
	
	void hello() {
		brokerMessagingTemplate.convertAndSend "/topic/hello", "hello from service!"
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值