2012-03-30 2 views
39

Sono relativamente nuovo a node.js e ai suoi add-on, quindi questa è probabilmente una domanda per principianti.Connessione client a server tramite Socket.io

Sto provando a ottenere una semplice pagina HTML su un server web connesso a un server diverso che esegue node.js con websocket.io.

Il mio codice è simile al seguente:

client

<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> 

Serverside

// 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 + '/'); 

Avvio il server funziona bene e in esecuzione http://localhost:8080 nel mio browser funziona anche, di ritorno 'Hello Socket Lover' come previsto. Ma voglio fare una pagina diversa parlare ai socket, non eseguirne uno da node.js.

Ma quando l'eseguo, non accade nulla ei rendimenti console Chrome:

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

Sono stato in questo tutto il giorno. Qualsiasi aiuto?

risposta

34

Hai provato a caricare lo script socket.io non da un URL relativo?

Stai utilizzando:

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

E:

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

si dovrebbe provare:

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

E:

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

Switch localhost:8080 con qualsiasi cosa si adatta alla configurazione corrente.

Inoltre, a seconda della configurazione, è possibile che si verifichino dei problemi di comunicazione con il server durante il caricamento della pagina client da un dominio diverso (criterio della stessa origine). Questo può essere superato in diversi modi (al di fuori dello scopo di questa risposta, google/SO it).

10

È necessario fare in modo che si aggiunge slash prima del tuo link per socket.io:

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

Poi nella vista/regolatore solo fare:

var socket = io.connect() 

Questo dovrebbe risolvere il tuo problema .

+9

'var socket = io()' –