赞
踩
一,消息推送的服务端
1.创建简单的springboot工程。pom配置如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>org.springframework</groupId>
- <artifactId>gs-messaging-stomp-websocket</artifactId>
- <version>0.1.0</version>
-
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.4.2.RELEASE</version>
- </parent>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-tomcat</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jetty</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-websocket</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.webjars</groupId>
- <artifactId>webjars-locator</artifactId>
- </dependency>
- <dependency>
- <groupId>org.webjars</groupId>
- <artifactId>sockjs-client</artifactId>
- <version>1.0.2</version>
- </dependency>
- <dependency>
- <groupId>org.webjars</groupId>
- <artifactId>stomp-websocket</artifactId>
- <version>2.3.3</version>
- </dependency>
- <dependency>
- <groupId>org.webjars</groupId>
- <artifactId>bootstrap</artifactId>
- <version>3.3.7</version>
- </dependency>
- <dependency>
- <groupId>org.webjars</groupId>
- <artifactId>jquery</artifactId>
- <version>3.1.0</version>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <properties>
- <java.version>1.8</java.version>
- </properties>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
- </project>
去掉了默认的tomcat,采用jetty
2.采用stomp消息格式,定义接收的消息和发送的消息bean
客户端发送的消息
- package hello;
-
- public class Greeting {
-
- private String content;
-
- public Greeting() {
- }
-
- public Greeting(String content) {
- this.content = content;
- }
-
- public String getContent() {
- return content;
- }
-
- }
服务器发送给客户端的消息
- package hello;
-
- public class HelloMessage {
-
- private String name;
-
- public HelloMessage() {
- }
-
- public HelloMessage(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
- }
3,消息处理handler
- package hello;
-
- import org.springframework.messaging.handler.annotation.MessageMapping;
- import org.springframework.messaging.handler.annotation.SendTo;
- import org.springframework.stereotype.Controller;
-
- @Controller
- public class GreetingController {
-
-
- @MessageMapping("/hello")
- @SendTo("/topic/greetings")
- public Greeting greeting(HelloMessage message) throws Exception {
- Thread.sleep(1000); // simulated delay
- return new Greeting("Hello, " + message.getName() + "!");
- }
-
- }
4对websocket类进行配置
- package hello;
-
- import org.springframework.context.annotation.Configuration;
- import org.springframework.messaging.simp.config.MessageBrokerRegistry;
- import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
- import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
- import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
-
- @Configuration
- @EnableWebSocketMessageBroker
- public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
-
- @Override
- public void configureMessageBroker(MessageBrokerRegistry config) {
- config.enableSimpleBroker("/topic");
- config.setApplicationDestinationPrefixes("/app");
- }
-
- @Override
- public void registerStompEndpoints(StompEndpointRegistry registry) {
- registry.addEndpoint("/gs-guide-websocket").withSockJS();
- }
-
- }
创建客户端app.js和index.html
app.js文件如下:
- var stompClient = null;
-
- function setConnected(connected) {
- $("#connect").prop("disabled", connected);
- $("#disconnect").prop("disabled", !connected);
- if (connected) {
- $("#conversation").show();
- }
- else {
- $("#conversation").hide();
- }
- $("#greetings").html("");
- }
-
- function connect() {
- var socket = new SockJS('/gs-guide-websocket');
- stompClient = Stomp.over(socket);
- stompClient.connect({}, function (frame) {
- setConnected(true);
- console.log('Connected: ' + frame);
- stompClient.subscribe('/topic/greetings', function (greeting) {
- showGreeting(JSON.parse(greeting.body).content);
- });
- });
- }
-
- function disconnect() {
- if (stompClient != null) {
- stompClient.disconnect();
- }
- setConnected(false);
- console.log("Disconnected");
- }
-
- function sendName() {
- stompClient.send("/app/hello", {}, JSON.stringify({'name': $("#name").val()}));
- }
-
- function showGreeting(message) {
- $("#greetings").append("<tr><td>" + message + "</td></tr>");
- }
-
- $(function () {
- $("form").on('submit', function (e) {
- e.preventDefault();
- });
- $( "#connect" ).click(function() { connect(); });
- $( "#disconnect" ).click(function() { disconnect(); });
- $( "#send" ).click(function() { sendName(); });
- });
-
点解connect即与服务器建立连接,在输入框输入任何消息,点击send,发送给服务器,会获得服务器的响应,
-
- 三、服务器主动发消息给客户端服务器主动发消息给客户端通过
最后,服务器主动发消息给客户端
通过SimpleMessagingTemplate类实现
@RestController public class TestController { @Autowired private SimpMessagingTemplate template; @RequestMapping(value = "/test",method = RequestMethod.GET) public String test(){ template.convertAndSend("/topic/greetings",new Greeting("hello")); return "hello"; } }
调用http://localhost:8080/test,会看到消息发给了客户端
以上就是对springboot服务端进行消息推送的大致介绍。不过目前似乎消息推送系统go或nodejs版本很流行。nodejs+socketio. java服务端可以调用消息推送系统接口实现消息发送到客户端。欢迎讨论。O(∩_∩)O~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。