2015-05-13 13 views
5

Ich werde eine einfache WebSocket Anwendung warten auf die Clients zu verbinden. Die Clients wären Android-Nutzer, und die Anwendung selbst ist ein einfacher Chat für zwei Personen. Also für die Android-Anwendung muss ich WebSocket Adresse wissen (beginnt mit ws: // oder wss: //). Ich habe bereits eine Website, wo ich nodejs installiere. Aber nach ein paar Tagen habe ich völlig festgefahren, was vor sich geht und wie etwas funktioniert. Ich wäre sogar froh zu sehen, dass nodejs irgendwelche WebSocket-Nachrichten fängt und das war's.Einfache WebSocket-Anwendung mit NodeJS

las ich einige Handbücher über NodeJS und socket.io, und wieder habe ich keine Ahnung, wo das ws zu bekommen: // Adresse und es irgendwie funktioniert.

Zum Beispiel von socket.io chat manual haben wir:

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

app.get('/', function(req, res){ 
    res.sendfile('index.html'); 
}); 

io.on('connection', function(socket){ 
    console.log('a user connected'); 
}); 

http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 

Ist das schon einfache websocket Anwendung? Wo ist meine gewünschte ws: // Adresse in diesem Fall? Vielleicht sollte ich nur diesen Haufen Code auf meinem Server hochladen und Anfragen an senden ws: //mydomain.com: 3000?

Antwort

4

Wenn Sie die socket.io Bibliothek auf dem Server verwenden, müssen Sie auch eine socket.io kompatible Bibliothek im Client verwenden, da es sich um ein Protokoll oben auf webSocket handelt, sodass beide Enden die gleiche Sprache sprechen müssen.

webSockets (und in diesem Fall socket.io) sind für die gemeinsame Nutzung Ihres Webservers ausgelegt. Daher wird jede webSocket-Verbindungsanfrage an Ihren Server nur an denselben Host und Port gesendet wie Ihr Webserver.

Jede webSocket-Anfrage beginnt mit einer http-Anfrage (daher wird sie von Ihrem Webserver bearbeitet) und dieser http-Anfrage als Kopfzeile, die eine Aktualisierung auf das webSocket-Protokoll anfordert. Wenn Ihr Webserver diesen benutzerdefinierten Header sieht, übergibt er die Kontrolle an die socket.io-Bibliothek, die daraufhin antwortet, dass das Upgrade auf das webSocket-Protokoll in Ordnung ist und der Socket, der als HTTP-Anforderung gestartet wurde, nun der Socket wird App spricht webSocket/socket.io.

Die socket.io-Bibliothek kümmert sich automatisch um die Verbindung mit Ihrem Webserver, um diese Anforderungen für das Protokoll-Upgrade anzuzeigen.

In der Web-Seite, die socket.io Code-Client dies verbinden aussehen würde gerade dies wie:

<script src="/socket.io/socket.io.js"></script> 
<script> 

var socket = io(); 
socket.on('connect', function() { 
    // socket.io webSocket connection with your server is now established 
}); 

</script> 

Die socket.io Bibliothek wird auf dem gleichen Host automatisch eine Verbindung zurück, dass die Web-Seite kamen aus . Sie müssen nicht einmal eine URL eingeben.

+0

Vielen Dank. Aber was ist, wenn ich eine Android-Anwendung habe und sie nicht auf demselben Server platziert ist (irgendwo in Placemarket, denke ich). Ich denke, socket.io ist nicht die richtige Wahl für diesen Zweck, aber was ist richtig? –

+0

Es gibt eine Bibliothek, die Sie für Android socket.io Client https://github.com/nkzawa/socket.io-client.java verwenden können. Sehen Sie sich diesen Post an: http://socket.io/blog/native-socket-io-and-android/ – jmartins

+0

@JamesMay - Sie können wahrscheinlich eine socket.io-kompatible Client-Bibliothek für Android finden, wenn Sie möchten. Ich finde, dass socket.io WebSockets ein wenig einfacher zu bedienen ist, so dass es ein guter Weg sein kann. Wie genau Sie auf eine socket.io kompatible Android-Bibliothek programmieren, hängt vollständig davon ab, welche Bibliothek Sie verwenden und wie sie funktioniert. Die socket.io-Seite scheint momentan Probleme zu haben, aber sie haben eine Diskussion über native Android-Apps hier: http://socket.io/blog/native-socket-io-and-android/ – jfriend00