1、依赖
grails-spring-websocket | Grails |
---|---|
2.2.0 | 3.0.10+ |
2.3.0 | 3.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!"
}
}