2016-05-11 6 views
0

Ich mache eine Angular-App für die Anzeige einer Daten kontinuierlich für einen Feder-Server gesendet. Meine Angular App verbindet sich korrekt, aber ich weiß nicht, wie man die Daten, die der Server sendet, abonniert. Ich zeige Ihnen mein Code:Abonnieren Sie eine kontinuierliche Daten mit Winkel-Websocket

Server, WebSocketConfiguration:

... 
@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer { 
    @Override 
    public void registerStompEndpoints(final StompEndpointRegistry registry){ 
     registry.addEndpoint("/random") 
     .setAllowedOrigins("*") 
     .withSockJS(); 
    } 
.... 

Server, DataGenerator:

... 
@SuppressWarnings("deprecation") 
@Component 
public class JapcDataGenerator implements ApplicationListener<BrokerAvailabilityEvent> { 
[...] 
public void sendDataUpdates(int val) { 
     System.out.println("sending : " + val); 
     this.messagingTemplate.convertAndSend("/data", val); 
    } 
... 

Client index.html:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us"> 
    <head> 
     <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
     <title>WebSocket chart example</title> 
    </head> 
    <body ng-app="WebSocketAngularApp"> 
     <div ng-controller="socktCtrl"> 
      <p>{{data}}</p> 
     </div> 
     <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script> 
     <script type="text/javascript" src="node_modules/angular-websocket/angular-websocket.js"></script> 
     <script type="text/javascript" src="resources/application.js" ></script> 
    </body> 
</html> 

Kunde application.js:

var socktApp = angular.module('WebSocketAngularApp',['ngWebSocket']); 

socktApp.factory('mySockt',function($websocket){ 
    var ws = $websocket('ws://137.138.245.169:8888/serverEx/random/websocket'); 
    var collection = []; 

    ws.onMessage(function(message){ 
     console.info("message: ", message); 
     collection.push(JSON.parse(message.data)); 
    }); 

    ws.onOpen(function(message){ 
     console.log("Connection open!",message); 
    }); 

    ws.onClose(function(){ 
     console.log("Closing the socket.") 
    }); 

    ws.onError(function(message){ 
     console.info("Error in socket", message); 
    }); 

    var methods = { 
     collection: collection, 
     get: function(){ 
      ws.send(JSON.stringify({action: 'data'})); 
     } 
    }; 
    return methods; 
}); 

socktApp.controller ('socktCtrl', function($scope, mySockt){ 
    $scope.data = mySockt; 
}); 

Das Ergebnis des Verbindungsprotokoll zeigt, aber nie die Botschaft, weil ich weiß nicht, wie das Abonnement zu diesem Datenfluss zu tun (die Zeile: this.messagingTemplate.convertAndSend("/data", val);).

Antwort

0

Versuchen Sie es mit ws.on('message', function...

message ist der Ereignisname vom Server emited.

+0

Ich hatte Andrew versucht, aber was ich bekomme ist: 'angular.js: 13550 TypeError: ws.on ist keine Funktion' Vielen Dank für die Anfrage. –

+0

Ich bin mit Winkel-socket-io v0.7.0, My socket sieht wie folgt aus: ... ... .factory ([ 'socket', function (socket) {var mySocket = socket() ; return mySocket; }]); Und dann in jedem Controller, verwende ich meine SocketFactory.on ('event_name', Funktion ... Und alles funktioniert gut, können Sie es testen? –

+0

Ich habe in anderen versuchen mit ihm gemacht, aber wann Ich versuche, meinen Server zu verbinden: 'io.connect ('ws: //137.138.245.169: 8888/serverEx/random/websocket');'; es gibt mir den nächsten Fehler: 'Fehler beim Laden der Ressource: Der Server hat geantwortet ein Status von 404 (nicht gefunden) http: //137.138.245.169: 8888/socket.io /? EIO = 3 & transport = polling & t = LIWPK4v'. Es verbindet sich nicht, ich fragte die andere Methode, weil ich denke, dass es fortgeschrittener war , da dies sogar nicht verbindet. –

Verwandte Themen