在有关Websocket的Spring boot官方文档中,他们告诉您可以使用套接字从任何组件发送消息。所以我想我可以保留(不通过套接字上传文件)我的其余控制器处理我的文件上传,并使用套接字从该控制器发送进度消息。
我验证了配置和客户端(使用SockJS),一切正常,因为例如我可以从控制器发送计划的消息,但我不希望出现这种情况。我想租用每当我要发送消息时都要呼叫的服务。 我还检查了许多与无法发送此类消息有关的问题,但是它们的所有解决方案都与客户端或配置类的配置不正确有关,但是正如我所说,我可以发送预定消息而没有任何问题,所以我认为我的问题可能是与控制器本身有关。
控制器
@Autowired
private SimpMessagingTemplate template;
@PostMapping("/")
public String handleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) {
File uploadedFile = storageService.store(file);
redirectAttributes.addFlashAttribute("message",
"You successfully uploaded " + file.getOriginalFilename() + "!");
template.convertAndSend("/topic/greetings", "test message");
myService.uploadFile(uploadedFile);
return "redirect:/";
}
配置类
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/gs-guide-websocket").withSockJS();
}
}
客户
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(greeting.body);
});
});
}
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-inline").on('submit', function (e) {
e.preventDefault();
});
$( "#connect" ).click(function() { connect(); });
$( "#disconnect" ).click(function() { disconnect(); });
$( "#send" ).click(function() { sendName(); });
});
$(document).ready(function() {
connect();
});
我要上传文件并能够查看其进度信息。该文件已上传并已处理,但未获取任何信息(我的消息不是通过套接字发送的。)