2012-03-30 12 views
39

Ich bin relativ neu zu node.js und Addons, so ist dies wahrscheinlich eine Anfängerfrage.Verbinden von Client zu Server mit Socket.io

Ich versuche, eine einfache HTML-Seite auf einem Webserver eine Verbindung zu einem anderen Server mit node.js mit Websocket.io zu bekommen.

Mein Code sieht wie folgt aus:

Kunde

<script src="socket.io/socket.io.js"></script> 
<script> 
    // Create SocketIO instance, connect 

    var socket = new io.Socket(); 

    socket.connect('http://127.0.0.1:8080'); 

    // Add a connect listener 
    socket.on('connect',function() { 
     console.log('Client has connected to the server!'); 
    }); 
    // Add a connect listener 
    socket.on('message',function(data) { 
     console.log('Received a message from the server!',data); 
    }); 
    // Add a disconnect listener 
    socket.on('disconnect',function() { 
     console.log('The client has disconnected!'); 
    }); 

    // Sends a message to the server via sockets 
    function sendMessageToServer(message) { 
     socket.send(message); 
    }; 
</script> 

Server

// Require HTTP module (to start server) and Socket.IO 
var http = require('http'); 
var io = require('socket.io'); 
var port = 8080; 

// Start the server at port 8080 
var server = http.createServer(function(req, res){ 
    // Send HTML headers and message 
    res.writeHead(200,{ 'Content-Type': 'text/html' }); 
    res.end('<h1>Hello Socket Lover!</h1>'); 
}); 

server.listen(port); 

// Create a Socket.IO instance, passing it our server 
var socket = io.listen(server); 

// Add a connect listener 
socket.on('connection', function(client){ 
    console.log('Connection to client established'); 

    // Success! Now listen to messages to be received 
    client.on('message',function(event){ 
     console.log('Received message from client!',event); 
    }); 

    client.on('disconnect',function(){ 
     clearInterval(interval); 
     console.log('Server has disconnected'); 
    }); 
}); 

console.log('Server running at http://127.0.0.1:' + port + '/'); 

Inbetriebnahme der Server funktioniert gut und läuft http://localhost:8080 in meinem Browser funktioniert auch, Rückkehr 'Hello Socket Lover' wie erwartet. Aber ich möchte eine andere Seite mit den Sockets reden lassen, nicht eine von node.js.

Aber wenn ich es laufen, passiert nichts und die Chrome-Konsole kehrt:

Failed to load resource   http://undefined/socket.io/1/?t=1333119551736 
Failed to load resource   http://undefined/socket.io/1/?t=1333119551735 

Ich habe an diesem ganzen Tag gewesen. Irgendeine Hilfe?

Antwort

34

Haben Sie versucht, das socket.io-Skript nicht von einer relativen URL zu laden?

Sie verwenden:

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

Und:

socket.connect('http://127.0.0.1:8080'); 

Sie versuchen sollten:

<script src="http://localhost:8080/socket.io/socket.io.js"></script> 

Und:

socket.connect('http://localhost:8080'); 

Switch localhost:8080 mit was auch immer Ihrem aktuellen Setup passt.

Je nach Konfiguration können beim Kommunizieren mit dem Server Probleme auftreten, wenn die Clientseite von einer anderen Domäne geladen wird (Richtlinie für denselben Ursprung). Dies kann auf verschiedene Arten überwunden werden (außerhalb des Bereichs dieser Antwort, google/SO it).

10

Sie müssen sicherstellen, dass Sie sich vor Ihrem Link hinzufügen slash Socket.io:

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

dann in der Ansicht/Controller gerade tun:

var socket = io.connect() 

, dass Ihr Problem lösen soll .

+9

'var socket = io()' –

Verwandte Themen