Hallo alle zusammen,
aufgrund einer Studienleistung die ich bald abgeben muss, habe ich eine Laborübung gemacht. Bei der soll man als erstes eine nebenläufige Klasse namens SensorSimulator erstellen. Von ihr wird der Server-Endpunkt später für jede Verbindung eine Thread-Instanz starten. Diese liefert dann die Messwerte die ausgegegeben werden sollen usw.
Der Server-Endpunkt heißt MessungsService. Diese Klasse soll nun die Sensormesswertänderungen an den Client senden.
Hinzu kommt jetzt noch eine HTML Seite, die zwei buttons zur verfügung stellen (connect & disconnect). Diesen buttons habe ich JavaScript-Funktionen zugewiesen, um eine Verbindungsauf/abbau zu schaffen.
Bitte davon ausgehen, das die Syntax fehlerfrei ist (da identisch zur Lösung vom Prof.)...
Ich arbeite übrigens mit JAVA EE IDE & Tomcat 7.xx
Nun mein Problem:
Sobald ich die HTML Datei mit run as --> run on Server starte, erscheinen die buttons. Aber wenn ich auf connect klicke, passiert nichts. Kann mir da jemand weiterhelfen bitte? Wie testet man Websockets genau?
Danke im vorraus
aufgrund einer Studienleistung die ich bald abgeben muss, habe ich eine Laborübung gemacht. Bei der soll man als erstes eine nebenläufige Klasse namens SensorSimulator erstellen. Von ihr wird der Server-Endpunkt später für jede Verbindung eine Thread-Instanz starten. Diese liefert dann die Messwerte die ausgegegeben werden sollen usw.
Java:
package var.web.ws.sensor;
import java.io.IOException;
import java.util.Random;
import javax.websocket.RemoteEndpoint;
import javax.websocket.Session;
public class SensorSimulator extends Thread {
private Session session;
private Random random;
private double messwert;
public SensorSimulator(Session session) {
super();
this.session = session;
random = new Random();
messwert = 100.0;
}
public double getMesswert() {
return messwert;
}
@Override
public void run() {
try {
while (session != null && session.isOpen()) {
sleep(random.nextInt(1000));
} if(random.nextBoolean()) {
messwert += 0.1;
notifyClient();
} else {
messwert -= 0.1;
notifyClient();
}
} catch (InterruptedException | IOException e) {
e.printStackTrace();
}
}
public void notifyClient() throws IOException {
RemoteEndpoint.Basic client = session.getBasicRemote();
String message = String.format("%.2f", messwert);
client.sendText(message);
}
}
Der Server-Endpunkt heißt MessungsService. Diese Klasse soll nun die Sensormesswertänderungen an den Client senden.
Code:
package var.web.ws.sensor;
import javax.websocket.OnClose;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/messungen")
public class MessungsService {
@OnOpen
public void open(Session session) {
SensorSimulator sensor = new SensorSimulator(session);
session.getUserProperties().put("sensor", sensor);
sensor.start();
}
@SuppressWarnings("deprecation")
@OnClose
public void close(Session session) {
SensorSimulator sensor =
(SensorSimulator) session.getUserProperties().get("sensor");
sensor.stop();
session.getUserProperties().remove("sensor");
}
}
Hinzu kommt jetzt noch eine HTML Seite, die zwei buttons zur verfügung stellen (connect & disconnect). Diesen buttons habe ich JavaScript-Funktionen zugewiesen, um eine Verbindungsauf/abbau zu schaffen.
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Client für Sensormessungen</title>
<script>
var uri = 'ws://localhost:8080/VAR-07-01_WS/messungen';
var socket;
function $(a) {
return document.getElementById(a);
}
function connect() {
socket = new Websocket(uri);
socket.onmessage = function(message) {
$('data').innerHTML = "letzte Messung: " + message.data;
};
}
function disconnect() {
socket.close();
}
windows.onunload = function() {
socket.close();
}
</script>
</head>
<body>
<button onclick="connect();">Connect</button>
<button onclick="disconnect();">Disconnect</button>
<div id="data"> </div>
</body>
</html>
Bitte davon ausgehen, das die Syntax fehlerfrei ist (da identisch zur Lösung vom Prof.)...
Ich arbeite übrigens mit JAVA EE IDE & Tomcat 7.xx
Nun mein Problem:
Sobald ich die HTML Datei mit run as --> run on Server starte, erscheinen die buttons. Aber wenn ich auf connect klicke, passiert nichts. Kann mir da jemand weiterhelfen bitte? Wie testet man Websockets genau?
Danke im vorraus