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>";
}
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>";
}
Comment