2017-08-01 2 views
1

Ich versuche eine Anwendung zu erstellen, wo der Server Nachricht in einigen Abständen an den Client weiterleiten wird. Ich habe eine einfache HTML-Datei wie folgt.Wie mit Feder websocket kommunizieren

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
<script src="sockjs/sockjs.js"></script> 
<script src="stomp/stomp.js"></script> 
<div ng-app="myApp" ng-controller="myCtrl"> 
<button ng-click='connect()'>hi</button> 
</div> 

<script> 
var app = angular.module('myApp', []); 

app.controller('myCtrl', function($scope) { 
    $scope.connect = function() { 
     var socket = new SockJS('http://localhost:8099/myws'); 
     $scope.stompClient = Stomp.over(socket); 
     $scope.stompClient.connect({}, function (frame) { 
      console.log('Connected:bhabani ' + frame); 
      $scope.stompClient.subscribe('http://localhost:8099/topic/jobconfig', function (wsdata) { 
       console.log("helloooooooooooooooooooooooooooooooooooooooooooooooooo"); 
       console.log(wsdata); 
      }); 
     }); 
    } 
}); 
</script> 

Ich öffnete die HTML-Datei im Dateisystem. file: ///export/data1/test-ws.html im Browser.

Jetzt habe ich eine Feder Web-Buchse wie folgt.

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 

    @Autowired 
    private GreetingController gc; 

    @Override 
    public void configureMessageBroker(MessageBrokerRegistry config) { 
     config.enableSimpleBroker("/topic"); 
     config.setApplicationDestinationPrefixes("/app"); 
    } 

    @Override 
    public void registerStompEndpoints(StompEndpointRegistry registry) { 
     registry.addEndpoint("/myws").setAllowedOrigins("*").withSockJS(); 
     new Thread(gc).start(); 
    } 

} 

Haben Sie einen Gruß Controller wie diese, die eine Nachricht an das Thema in einigen internen

@Component 
public class GreetingController implements Runnable{ 

    @Autowired 
    private SimpMessagingTemplate template; 

    public void run() { 
     try { 
      Thread.sleep(10000); 
     } catch (InterruptedException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     while(true){ 
     try { 
      System.out.println("Sending"); 
      Thread.sleep(1000); 
      template.convertAndSend("/topic/jobconfig", new Greeting("hi")); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     } 
    } 

Wo i i-Verbindung hergestellt wird sehen können, drücken Sie die Verbindungstaste drücken sollte. Aber danach sehe ich keine Nachricht im Browser, die vom Server geschoben werden sollte.

Ich erwarte, dass die 'helloooooooooooo' Nachricht in jedem Intervall in meiner Browserkonsole gedruckt werden soll.

Antwort

0

Ändern Sie URL in Stomp-Client-Abonnement-Code von diesem http://localhost:8099/topic/jobconfig zu diesem /topic/jobconfig.

$scope.stompClient.subscribe('/topic/jobconfig', function(wsdata) { 
        console.log("hello"); 
        console.log(wsdata); 
       }); 
+0

Vielen Dank. Es funktionierte :) –

Verwandte Themen