Websockets | HTML5

P

piir

Gast
Hallo, ich stehe gerade vor einem Problem.
Ich würde mich gerne weiterbilden und Websockets programmieren.
Im Internet finde ich meistens nur Englische Tutorials, da mein Englisch nicht das beste ist bitte ich hier um Hilfe.

Also am besten würde ich das ganze Thema zuerst Ausarbeiten.
Vor und Nachteile (kein long-polling usw...)
Wie es funktioniert, Beispiele usw.

Nun stoße ich auf ein Problem, wie löse ich das mit Tomcat als Server?
Habe noch nie Tomcat benutzt, und wollte fragen ob es möglich ist.

Danke im Voraus .
 

schalentier

Gesperrter Benutzer
Tomcat kann das imho out-of-the-box nicht. Ich empfehle node.js. Das ist ein Webserver, den man mit Javascript programmiert. Der kann auch Websockets und das super einfach:
Java:
var webSocket = socketIO.listen(httpServer);
webSocket.on('connection', function(client) {
    client.send('Please enter a user name ...');

    var userName;
    client.on('message', function(message) {
        if(!userName) {
            userName = message;
            webSocket.broadcast(message + ' has entered the zone.');
            return;
        }

        var broadcastMessage = userName + ': ' + message;
        webSocket.broadcast(broadcastMessage);
    });

    client.on('disconnect', function() {
        var broadcastMessage = userName + ' has left the zone.';
        webSocket.broadcast(broadcastMessage);
    });
});

Fehlt noch das entsprechende HTML5:
Code:
<html>
    <head>
        <title>Simple chat o' rama</title>
    </head>
    <body>
        <div>
            <p>
                <label for="messageText">Message</label>
                <input type="text" id="messageText"/>
            </p>
            <p>
                <button id="sendButton">Send</button>
            </p>
        </div>
        <div>
            <ul id="messages">
            </ul>
        </div>
        <script type="text/javascript"
                src="http://localhost:2000/socket.io.js"></script>
        <script type="text/javascript"
                src="http://code.jquery.com/jquery-1.5.2.js"></script>

        <script type="text/javascript">
            $(document).ready(function() {
                var webSocket = new io.Socket('localhost', { port: 2000 });
                webSocket.connect();

                webSocket.on('connect', function() {
                    $('#messages').append('<li>Connected to the server.</li>');
                });

                webSocket.on('message', function(message) {
                    $('#messages').append('<li>' + message + '</li>');
                });

                webSocket.on('disconnect', function() {
                    $('#messages').append('<li>Disconnected from the server.</li>');
                });

                $('#sendButton').bind('click', function() {
                    var message = $('#messageText').val();
                    webSocket.send(message);
                    $('#messageText').val('');
                });
            });
        </script>
    </body>
</html>

Link: Elegant Code Taking Baby Steps with Node.js &ndash; WebSockets

PS: Lern Englisch!
 

Kr0e

Gesperrter Benutzer
Netty3 kann das auch.... Vermutlcih noch viele weitere Frameworks. Ich meine GlassFish kann das auch..

Vorteile von Websockets sind fast unbeschränkt... Echtzeit!
 
P

piir

Gast
Danke für die schnelle Hilfe.

Ich muss über dieses Thema referieren, und unser Professor hat da ziemlich strikte Kriterien die ich erfüllen sollte. Diese sehen wie folgt aus:


  • Inhalt (Definitionen, Vor-Nachteile, Vergleich zu anderen Sprachen)
    Verständlichkeit
    Aufbau (Ziele oder Problematik, Resümee)
    Beispiele (1 Hello World, 1 Praxisrelevantes)
    Umfang (max 6 Seiten)

und jetzt ist mir eben noch unklar wie ich das auf 6 Seiten packen soll :DD

Jedenfalls danke, super Forum
 

Lumaraf

Bekanntes Mitglied
Leider unterstützen viele Proxys noch keine Websockets. Das Problem kann man aber zum Glück leicht umgehen indem man die Verbindung via SSL einfach verschlüsselt. Ansonsten gibt es bei Websockets noch das Problem das aktuelle keine sinnvolle Komprimierung der Verbindung im Protokoll vorgesehen ist. Solange man keine großen Datenpackete vom Server zum Client über Websockets verschickt sind die aber so gut wie immer eine gute Wahl.
 
I

irgendjemand2

Gast
Das Problem kann man aber zum Glück leicht umgehen indem man die Verbindung via SSL einfach verschlüsselt.

sorry wenn ich so dumm frage ... aber das bringt bitte WAS ?
wenn der proxy kein SOCKS bzw HTTP CONNECT unterstützt ... dann wird er auch bei ner SSL verbindung *wobei du hier wohl sicher HTTPS meinst ... da alles andere auch wieder SOCKS bräuchte* irgendwann mit nem timeout die verbindung trennen ...

ansonsten : sorry für die vermutlich dumme frage ... aber : könntest du mir dann bitte mal erklären wie SSL da helfen soll ?
 

Lumaraf

Bekanntes Mitglied
HTTPS ist nur HTTP kombiniert mit SSL. Da HTTPS zum Glück von sehr vielen Proxys unterstützt wird und es vor allem nie über transparente Proxys umgeleitet wird kann man da super die Websockets drin verstecken.
 
T

tuxedo

Gast
Ansonsten gibt es bei Websockets noch das Problem das aktuelle keine sinnvolle Komprimierung der Verbindung im Protokoll vorgesehen ist.

Kann dir nicht folgen. Websockets ermöglichen doch nur Socketverbindungen welche mittels HTTP vermittelt werden...
Die damit aufgebaute Socketverbindung hat kein eigenes Protokoll. Es ist doch dem Nutzer/Entwickler überlassen ein Protokoll darüber zu fahren, welches komprimierung beherrscht (oedr auch nicht)?!

Solange man keine großen Datenpackete vom Server zum Client über Websockets verschickt sind die aber so gut wie immer eine gute Wahl.

?? Ob ich nun viel oder wenig Daten schicke ist dem Websocket doch egal.. Sehe bzgl. der Übertragung keinen Unterschied zu "normalen Sockets".

- Alex
 

Lumaraf

Bekanntes Mitglied
Kann dir nicht folgen. Websockets ermöglichen doch nur Socketverbindungen welche mittels HTTP vermittelt werden...
Die damit aufgebaute Socketverbindung hat kein eigenes Protokoll. Es ist doch dem Nutzer/Entwickler überlassen ein Protokoll darüber zu fahren, welches komprimierung beherrscht (oedr auch nicht)?!



?? Ob ich nun viel oder wenig Daten schicke ist dem Websocket doch egal.. Sehe bzgl. der Übertragung keinen Unterschied zu "normalen Sockets".

- Alex

Websockets starten erstmal als gewöhnlicher HTTP-Request in dem an den Headern erkennen kann ob ein Upgrade auf eine Websocket Verbindung erwünscht ist. Insofern der Server die Upgradeanfrage akzeptiert wird dann auf das Websocket Protokoll umgeschaltet in dem in beiden Richtungen die Datenpackete in Websocket-Frames verpackt werden. Unter draft-ietf-hybi-thewebsocketprotocol-17 - The WebSocket Protocol steht wie die Datenpackete in den aktuelleren Protokollversionen aussehen. (Bei früheren Websocket-Versionen sehen die Datenpackete etwas anders aus)
 
T

tuxedo

Gast
Naj schön, gleiches gibts bei "TCP Sockets" ja auch. Und da "beschwert" sich auch keiner dass die darunterliegenden Frames nicht komprimiert sind..

Gut, ich muss zugeben, ich hab mit Websockets noch nichts realisiert, aber ich kann mir nicht vorstellen dass der Overhead dermaßen groß ist dass man da nix was über ein paar kilobytes drüber hinaus geht übertragen kann.

Hat jemand mal Zahlen hierfür?
 
Zuletzt bearbeitet von einem Moderator:

Lumaraf

Bekanntes Mitglied
Bei gewöhnlichen HTTP-Requests kann man die Daten die vom Server einfach gzip komprimiert schicken und der Browser kümmert sich um das enpacken. Mit Websockets geht das nicht da zum einen momentan nur UTF-8 Strings von den Browsern verstanden werden und zum anderen müßte man dann den Algorithmus zum entpacken in Javascript implementieren.
 
T

tuxedo

Gast
Das leuchtet ein. Aber man kann ja Websockets auch als "Tunnel" für andere Anwendungszwecke benutzen, und nicht einfach nur zwischen Browser und Webserver Strings bidirektional austauschen...
 
J

javateil

Gast
Hallo,
es sollte doch möglich sein pywebsockets auf tomcat einzuspielen oder?
dann würde doch tomcat auch websockets unterstützen?
 

Evil-Devil

Top Contributor
Imho sollte man Websockets nicht primär als zur Datenübertragung nutzen. Anwendungen ala Chats ok, aber aktuell würde ich die Hauptanwendung darin sehen den Browser/User über Statusveränderungen in Kenntnis zu setzen. Zb. bei einem Ajax Upload und ähnlichen Dinge sodass der Browser dann einen HTTP Request absetzt und die eigentlichen Daten anfordern kann.
 

TheDarkRose

Gesperrter Benutzer
Ich sehe den Vorteil von Websockets darin, das nicht dauernd der Browser pollen muss, sondern der Client per Push vom Server über Änderungen benachrichtigt wird. Mit Websockets wird HTTP endlich "Statefull".
 

Ähnliche Java Themen

Neue Themen


Oben