开发手册 欢迎您!
软件开发者资料库

Spring Boot - Web Socket

Spring Boot Web Socket - 从简单和简单的步骤学习Spring Boot,从基本到高级概念,包括简介,快速入门,Bootstrapping,Tomcat部署,构建系统,代码结构,Spring Bean和依赖注入,Runners,应用程序属性,日志记录等示例,构建RESTful Web服务,异常处理,拦截器,Servlet过滤器,Tomcat端口号,Rest模板,文件处理,服务组件,Thymeleaf,使用RESTful Web服务,CORS支持,国际化,调度,启用HTTPS,Eureka服务器,服务注册Eureka,Zuul代理服务器和路由,Spring云配置服务器,Spring云配置客户端,执行器,管理服务器,管理客户端,启用Swagger2,创建Docker镜像,跟踪微服务日志,Flyway数据库,发送电子邮件,Hystrix,Web套接字,批处理服务,Apache Kafka的Spring,Twilio,单元测试用例,休息控制器单元测试,数据库处理,保护Web应用程序lications,OAuth2 with JWT,Google Cloud Platform,Google OAuth2 Sign-In。

在本章中,让我们了解如何使用带有Web套接字的Spring Boot构建交互式Web应用程序.

要使用Web套接字在Spring Boot中构建交互式Web应用程序,需要添加以下依赖项.

Maven用户应在pom.xml文件中添加以下依赖项.

   org.springframework.boot   spring-boot-starter-websocket   org.webjars   webjars-locator   org.webjars   sockjs-client   1.0.2   org.webjars   stomp-websocket   2.3.3   org.webjars   bootstrap   3.3.7           org.webjars   jquery   3.1.0

Gradle用户可以在build.gradle文件中添加以下依赖项 :

 compile("org.springframework.boot:spring-boot-starter-websocket") compile("org.webjars:webjars-locator") compile("org.webjars:sockjs" -client:1.0.2") compile("org.webjars:stomp-websocket:2.3.3") compile("org.webjars:bootstrap:3.3.7") compile("org.webjars:jquery:3.1.0")

让我们创建一个消息处理控制器来处理STOMP消息传递. STOMP消息可以路由到@Controller类文件.例如,GreetingController被映射为处理到目的地"/hello"的消息.

package com.it1352.websocketapp; import org.springframework.messaging.handler.annotation.MessageMapping;import org.springframework.messaging.handler.annotation.SendTo;import org.springframework.stereotype.Controller;@Controllerpublic 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() + "!");   }}

现在,为Spring配置STOMP消息传递.编写一个扩展AbstractWebSocketMessageBrokerConfigurer类的WebSocketConfig类文件,如下所示.

  package com.it1352.websocketapp;  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@EnableWebSocketMessageBrokerpublic class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {   @Override   public void configureMessageBroker(MessageBrokerRegistry config) {      config.enableSimpleBroker("/topic");      config.setApplicationDestinationPrefixes("/app");   }   @Override   public void registerStompEndpoints(StompEndpointRegistry registry) {      registry.addEndpoint("/IT屋-websocket").withSockJS();   }}

@EnableWebSocketMessageBroker注释用于配置Web套接字消息代理以创建STOMP端点.

您可以在src/main/resources/static/index.html下创建一个浏览器客户端文件,如下所示 :

         Hello WebSocket                                                                                                                                    WebSocket connection:                     Connect                     Disconnect                                       
                           
                                                                              What is your name?                                                         Send                                                                                                                                                Greetings                                                                                                      

让我们创建一个app.js文件,使用STOMP来消费和生成消息.

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('/it1352-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("" + message + "");}$(function () {   $( "form" ).on('submit', function (e) {e.preventDefault();});   $( "#connect" ).click(function() { connect(); });   $( "#disconnect" ).click(function() { disconnect(); });   $( "#send" ).click(function() { sendName(); });});

主要Spring Boot应用程序的代码如下所示.

package com.it1352.websocketapp; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class WebsocketappApplication {   public static void main(String[] args) {      SpringApplication.run(WebsocketappApplication.class, args);   }  }

完整的构建配置文件如下:

Maven  -  pom.xml

      4.0.0   com.IT屋   websocketapp   0.0.1-SNAPSHOT   jar   websocketapp   Demo project for Spring Boot         org.springframework.boot      spring-boot-starter-parent      1.5.9.RELEASE                     org.springframework.boot         spring-boot-starter-websocket                     org.webjars         webjars-locator                     org.webjars         sockjs-client         1.0.2                           org.webjars         stomp-websocket         2.3.3                     org.webjars         bootstrap         3.3.7                           org.webjars         jquery         3.1.0                     org.springframework.boot         spring-boot-starter-test         test                     1.8                                    org.springframework.boot            spring-boot-maven-plugin                     

Gradle  -  build.gradle

buildscript {   repositories {      mavenCentral()   }   dependencies {      classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.9.RELEASE")   }}apply plugin: 'java'apply plugin: 'eclipse'apply plugin: 'org.springframework.boot'jar {   baseName = 'websocketapp'   version =  '0.1.0'}sourceCompatibility = 1.8targetCompatibility = 1.8repositories {   mavenCentral()}dependencies {   compile("org.springframework.boot:spring-boot-starter-websocket")   compile("org.webjars:webjars-locator")   compile("org.webjars:sockjs-client:1.0.2")   compile("org.webjars:stomp-websocket:2.3.3")   compile("org.webjars:bootstrap:3.3.7")   compile("org.webjars:jquery:3.1.0")   testCompile("org.springframework.boot:spring-boot-starter-test")}