Information Technology Reference
In-Depth Information
Die
sendmsg()
-Funktion, die bei jedem Tastendruck innerhalb des Textfeldes
ausgelöst wird, schickt den gesamten Inhalt des Textfeldes an den Websocket.
Wird die Verbindung zum Websocket aus irgendeinem Grund beendet (zum
Beispiel durch eine fehlende Netzwerkverbindung oder Serverprobleme), löst
das Websocket-Objekt das
close
-Event und damit die
onclose
-Funktion aus. In
unserem Beispiel setzen wir die Statuszeile auf
offline
in roter Farbe. Beim
Verlassen der Seite (
window.onunload
) schließen wir den Websocket explizit und
melden uns damit beim Server ab.
9.2.2 DerBroadcast-Server
Um das Beispiel zu vervollständigen, fehlt uns noch die Server-Komponente.
Wie eingangs erwähnt, verwenden wir für die Websocket-Beispiele in diesem
Buch die
node.js
-Runtime und den node-websocket-server. Didaktisch ist das
deshalb sehr günstig, weil wir dadurch nicht in eine andere Programmierspra-
che wechseln müssen und der Server-Code für Sie auch problemlos verständ-
lich sein sollte.
Der Server arbeitet, ähnlich wie der Client,
event
-gesteuert. Jede eingehende
Verbindung und jede eingehende Nachricht lösen ein
connection
- beziehungs-
weise ein
message
-Event aus, auf das wir im JavaScript-Code reagieren. Zu Be-
ginn des Scripts laden wir die
node-websocket-server
-Bibliothek, die im Unter-
verzeichnis
lib/
liegt und den Namen
ws.js
hat. Die Variable
server
wird mit
einem neuen Websocket-Objekt belegt.
var ws = require(__dirname + '/lib/ws'),
server = ws.createServer();
var user_cols = {};
server.addListener("connection", function(conn) {
var h = conn._server.manager.length*70;
user_cols[conn.id] = "hsl("+h+",100%,30%)";
var msg = {};
msg.user = conn.id;
msg.color = user_cols[conn.id];
msg.text = "<em>Ein neuer Benutzer ist eingetreten</em>";
conn.broadcast(JSON.stringify(msg));
Der erste
EventHandler
(
connection
) kümmert sich um neue Verbindungen. Wie
auch im Beispiel in Kapitel 8.5, Beispiel: Knapp dran!, vergeben wir die Farbe
für den Benutzer schrittweise im HSL-Farbraum, wobei wir für jeden neuen