我使用的是Spring MVC(4.2.2.RELEASE)和Tomcat 8。 我的要求是向浏览器发送通知。 请找到以下代码。
控制器 -------------- @Controller public class MessageController { // @自动私有SimpMessagingTemplate模板; @Autowired私人SimpMessageSendingOperations模板; List noteList = new ArrayList();
public MessageController() {
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
//@SubscribeMapping("/topic/notify")
//@SendToUser("/topic/notify")
public void sendMessage(String msg){
Notification note = new Notification();
note.setMsg(msg);
noteList.add(note);
template.convertAndSend("/topic/price", noteList);
}
}
Configuration
---------------
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/queue","/topic");
}
}
Client code
---------
var socket = new SockJS("/intl-fcstone/ws");
var stompClient = Stomp.over(socket);
var connectCallback = function() {
console.log('----inside connectCallback before----');
stompClient.subscribe('/topic/price', notifyUser);
console.log('----inside connectCallback after----');
};
var errorCallback = function(error) {
console.log('----inside errorCallback----');
alert(error.headers.message);
};
stompClient.connect("guest", "guest", connectCallback, errorCallback);
function notifyUser(frame) {
console.log('----inside notifyUser1----'+frame);
console.log('----inside notifyUser2----'+frame.body);
var notes = JSON.parse(frame.body);
console.log('----inside notifyUser3----'+notes);
if(notes !=''){
var $messageDiv = $('#notification_div'); // get the reference of the div
$messageDiv.show().html(notes);
}
Chrome console
---------------
Opening Web Socket...
stomp.js:134 Web Socket Opened...
stomp.js:134 >>> CONNECT
login:guest
passcode:guest
accept-version:1.1,1.0
heart-beat:10000,10000
stomp.js:134 <<< CONNECTED
version:1.1
heart-beat:0,0
user-name:suppliersin@gmail.com
stomp.js:134 connected to server undefined
(index):159 ----inside connectCallback before----CONNECTED
user-name:suppliersin@gmail.com
heart-beat:0,0
version:1.1
stomp.js:134 >>> SUBSCRIBE
id:sub-0
destination:/topic/price
(index):161 ----inside connectCallback after----CONNECTED
user-name:suppliersin@gmail.com
heart-beat:0,0
version:1.1
---------------------------
after this, nothing happens.
http://localhost:8080/intl-fcstone/ws/info shows
{
entropy: -646614392,
origins: [
"*:*"
],
cookie_needed: true,
websocket: true
}
Any help on this is much appreciated.
答案 0 :(得分:0)
答案 1 :(得分:0)
此问题已得到解决。我在context.xml
<websocket:message-broker application-destination-prefix="/app">
<websocket:stomp-endpoint path="/ws">
<websocket:handshake-interceptors>
<bean class="org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor" />
</websocket:handshake-interceptors>
<websocket:sockjs session-cookie-needed="true" />
</websocket:stomp-endpoint>
<websocket:simple-broker prefix="/topic, /queue" />
<websocket:client-inbound-channel>
<websocket:executor core-pool-size="50"
max-pool-size="100" keep-alive-seconds="60" />
</websocket:client-inbound-channel>
<websocket:client-outbound-channel>
<websocket:executor core-pool-size="50"
max-pool-size="100" keep-alive-seconds="60" />
</websocket:client-outbound-channel>
<websocket:broker-channel>
<websocket:executor core-pool-size="50"
max-pool-size="100" keep-alive-seconds="60" />
</websocket:broker-channel>
</websocket:message-broker>
并使用
@Autowired private SimpMessageSendingOperations template;
在我的控制器中。我也用
template.convertAndSendToUser(authentication.getName(), "/queue/price", noteList);
正在向特定用户发送通知。
最后,在客户端
user = frame.headers['user-name'];
stompClient.connect(user, user, connectCallback, errorCallback);