Announcement

Collapse
No announcement yet.

WebSocket Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • WebSocket Problem

    Hi,

    ich habe ein Problem mit einer WebSocketverbindung.

    Ich habe es Momentan so, dass ich von einem verbundenen WebClient zum nächsten via WebSocket Nachrichten senden kann und im Endeffekt wird dabei die @OnMessage aufgerufen und an die einzelnen verbundenen Clients wird die Nachricht versendet.

    Nun ist es so, dass ich eigentlich nur eine Textausgabe haben will in der meine aktuellen Werte aus einer Datenbank auf einer Webseite angezeigt werden, diese ändern sich ca. alle 60 Sekunden und sobald dies passiert soll mein @ServerEndpoint diese Daten an die Clients verteilen ohne auf aktualisieren klicken zu müssen.

    Kann mir jemand helfen und mir sagen wie ich aus einer normalen Klasse die meine Daten der Datenbank holt und vergleicht an diese @OnMessage Methode übergebe und diese dann die Clients automatisch informiert sich die Daten neu zu holen?

    MfG Sascha

    Hier noch mein Quelltext:

    //----------------------------------------------------

    @ServerEndpoint("/Server")
    public class EndpointServer {

    private static Set<Session> peers = Collections.newSetFromMap(new ConcurrentHashMap<Session, Boolean>());

    @OnOpen
    public void onOpen(Session session) {
    System.out.println("Client Verbunden");
    peers.add(session);
    }

    @OnClose
    public void onClose(Session session) {
    System.out.println("Client getrennt");
    peers.remove(session);
    }

    @OnMessage
    public String handleMessage(String message) {

    for (Session s : peers ) {
    try {

    s.getBasicRemote().sendText(message);
    } catch (IOException ex) {
    Logger.getLogger(EndpointServer.class.getName()).l og(Level.SEVERE,
    null, ex);
    }
    }
    return null;
    }

    //------------------------------------------------------
    Javascript Teil

    var wsUri = "ws://127.0.0.1:8080/ChatWebSocket/ServerEndpoint";
    var websocket = new WebSocket(wsUri);

    websocket.onopen = function(evt) {onOpen(evt)};
    websocket.onmessage = function(evt) {onMessage(evt)};
    websocket.onerror = function(evt) {onError(evt)};
    var output = document.getElementById("textField");


    function send_message() {
    websocket.send(textField.value);
    }

    function onOpen() {
    writeToScreen("Connected to " + wsUri);
    }

    function onClose() {
    writeToScreen("Verbindung getrennt");
    }

    function onMessage(evt) {
    if (evt.data.indexOf("joined") != -1) {
    userField.innerHTML += evt.data.substring(0, evt.data
    .indexOf(" joined"))
    + "\n";
    } else {
    chatlogField.innerHTML += evt.data + "\n";
    writeToScreen("Message");
    }
    }

    function onError(evt) {
    writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);
    writeToScreen("Error");
    }

    function writeToScreen(message) {
    output.innerHTML += message + "<br>";
    }
    Zuletzt editiert von S.Lehmann; 12.03.2014, 13:49.

  • #2
    @OnMessage ist keine Methode, sondern eine Annotation an der Methode shapeCreated. Die wiederum kann von anderen Klassen ganz normal über die Instanz der Klasse EndpointServer aufgerufen werden
    Christian

    Comment


    • #3
      Die Instanz von EndpointServer wird erstellt bei Start des Programms (mit Start des tomcat) und ich kann auf diese Instanz nicht zugreifen,
      mir bringt es nichts mir eine neue Instanz von EndpointServer zu erstellen, wenn ich nicht auf die peers die verbunden sind und die in meiner HashMap stehen zugreifen kann.
      Wenn ich dann die Methode aufrufe ist meine HashMap leer da die peers die verbunden sind in einer anderen Instanz in der HashMap stehen.

      Comment


      • #4
        Wenn ich mich recht erinnere gibt es eine ServerApplicationConfig die man in die eigene Anwendung implementieren kann. Und über ServerEndpointConfig.Configurator mit der Methode getEndpointInstance kann man sich die Instanz geben lassen
        Christian

        Comment


        • #5
          Und wie implementiere ich diese am besten?

          Grüße Sascha

          Comment


          • #6
            Habe kein Beispiel -> würde da mal nach googlen
            Christian

            Comment


            • #7
              Finde zu dem Thema leider nichts brauchbares :/

              Comment


              • #8
                https://tyrus.java.net/documentation...eployment.html
                http://stackoverflow.com/questions/1...ocket-instance
                nur aus den ersten Treffern
                Christian

                Comment

                Working...
                X