WebSocket: Annäherung an Echtzeit im Web
Seite 4: Fazit
Die richtige Anwendung
Wie erwähnt, setzt WebSocket an, die komplexen Probleme des "Echtzeit-Web", wie Latenz oder Netzverkehr, anzugehen. WebSocket wird jedoch nicht als ein "besseres AJAX" entwickelt . Ebenfalls stellt WebSocket keinen 1:1-Ersatz für HTTP dar, sondern bietet vielmehr einen effizienten, bidirektionalen Kommunikationskanal an. Moderne Webanwendungen sollten ihn nutzen, um hochwertigere Protokolle beziehungsweise APIs zum Browser zu bringen. Traditionelle Client-Server-Anwendungen kommunizieren in der Regel nicht direkt über "rohes" TCP, sondern sie nutzen hochwertige Protokolle wie JDBC, XMPP oder JMS. Mit WebSocket ist es möglich, diese und andere Protokolle zum Browser zu zu überführen. JMS (Java Messaging Service) ist eine Java-API für das Versenden und Empfangen von Nachrichten im Kontext von "Message Oriented Middleware" (MOM). Ein Client kann so mit der Middleware kommunizieren oder Nachrichten von ihr empfangen (siehe hier). Mit WebSocket lässt sich JMS zum Browser hin erweitern. Das folgende Beispiel stellt die JavaScript-API des Kaazing WebSocket Gateway vor:
...
var stompConnectionFactory = new
StompConnectionFactory("ws://my.server.com:8000/jms")
var connectionFuture = stompConnectionFactory.createConnection(function () {
if (!connectionFuture.exception) {
connection = connectionFuture.getValue();
connection.setExceptionListener(handleException);
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
topic = session.createTopic("/topic/destination");
// creating some consumers!
var consumer1 = session.createConsumer(topic);
consumer1.setMessageListener(handleMessageCallback);
connection.start(someCallback);
}
...
});
Der Verbindungsaufbau erfolgt mit einer ConnectionFactory, die die URL des WebSocket-Servers entgegennimmt. Tritt kein Fehler auf, werden eine JMS Session und einTopic angelegt. Das Topic wird genutzt, um einen sogenannten Consumer zu erzeugen. Damit er Nachrichten vom Topic empfangen kann, benötigt er einen JMS Message Listener. Die handleMessageCallback()-JavaScript-Funktion wird aufgerufen, sobald Nachrichten vom JMS-Broker im Browser eintreffen:
function handleMessageCallack(message) {
// did Apache ActiveMQ send us a JMS TextMessage?
if (message instanceof TextMessage) {
var body = message.getText();
// do more stuff...
}
}
Fazit
Der JavaScript-Callback (handleMessageCallback) funktioniert ähnlich wie ein in Java geschriebener MessageListener: Er bekommt eine Nachricht und kann deren Nutzdaten (message.getText()) nutzen, um sie zu visualisieren.
Zusammenfassend lässt sich sagen, dass der WebSocket-Standard die Entwicklung einer neuen Generation von Anwendungen ermöglicht. Die Integration von "Echtzeit" innerhalb von Webanwendungen ist nicht mehr an Hacks und Workarounds gebunden, sondern erfolgt auf Basis eines standardisierten, effizienten und bidirektionalen Protokolls. Wichtig ist hierbei, dass man sämtliche TCP/UDP-Protokolle auf Basis von WebSocket zum Browser bringen kann. Der Abstraktionsgrad zukünftiger Webanwendungen steht damit den Desktop-Anwendungen in nichts nach. Statt gegen TCP/WebSocket zu programmieren, können Entwickler bereits vertraute Protokolle beziehungsweise APIs einsetzen. Besonders interessant ist das wiederum für Webspiele. Bei ihnen ist, im wahrsten Sinne des Wortes, Latenz tödlich.
Matthias WeĂźendorf (Blog)
arbeitet für die Firma Kaazing, die einen kommerziellen WebSocket-Server anbietet. Dort beschäftigt er sich unter anderem mit AMQP, JMS, .NET, Flash und HTML5, um das "Next Generation Web" voranzutreiben.
()