扫码一下
查看教程更方便
在本章中,让我们了解如何使用带有 web socket 套接字的 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.jiyik.websocketapp;
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() "!");
}
}
现在,为 stomp 消息配置 spring。 编写一个继承 abstractwebsocketmessagebrokerconfigurer
类的 websocketconfig 类文件,如下所示。
package com.jiyik.websocketapp;
import org.springframework.web.socket.config.annotation.abstractwebsocketmessagebrokerconfigurer;
import org.springframework.messaging.simp.config.messagebrokerregistry;
import org.springframework.web.socket.config.annotation.stompendpointregistry;
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("/jiyik-websocket").withsockjs();
}
}
@enablewebsocketmessagebroker
注解用于配置 web 套接字消息代理以创建 stomp 端点。
我们可以在 src/main/resources/static/ 下创建一个浏览器客户端文件 index.html,如下所示
hello websocket
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('/tutorialspoint-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.jiyik.websocketapp;
import org.springframework.boot.springapplication;
import org.springframework.boot.autoconfigure.springbootapplication;
@springbootapplication
public class websocketappapplication {
public static void main(string[] args) {
springapplication.run(websocketappapplication.class, args);
}
}