【发布时间】:2019-06-16 10:13:36
【问题描述】:
我正在尝试组合一个使用 AngularJS 和 Spring Boot 的简单示例 WebSocket 应用程序。我正在使用this angularjs websocket library
问题是我无法从客户端向服务器发送任何内容。前端没有错误,后端没有任何错误记录。
Websocket 配置:
package org.example.project;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements
WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/report");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/socket").
setAllowedOrigins("*").withSockJS();
}
}
Websocket 端点实现:
package org.example.project;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
@Controller
public class WebSocketController {
private final SimpMessagingTemplate template;
@Autowired
WebSocketController(SimpMessagingTemplate template) {
this.template = template;
}
@MessageMapping("/uc/status/request")
public void onReceivedMessage(String message) {
System.out.println(" THIS CAME FROM WS CLIENT ");
this.template.convertAndSend("/uc/status/report",
"received " + message);
}
}
Angular 客户端实现:
'use strict'
var app = angular.module('app', [
'ngWebSocket'
])
app.controller("MyController", function($scope, $http, $websocket) {
// path to the end point is actually /app/uc/status/request
// unable to add end point path when connecting
// and don't know how to subscribe
var ws = $websocket('ws://localhost:8080/socket/websocket/');
ws.onMessage(function(event) {
console.log('message: ', event);
});
ws.onError(function(event) {
console.log("error");
});
ws.onClose(function(event) {
});
ws.onOpen(function(event) {
console.log('connection open');
});
// nothing happens when this call is made
ws.send("message content", "/app/uc/status/request");
});
【问题讨论】:
标签: java angularjs spring-boot websocket