2012-03-30 34 views
39

Soy relativamente nuevo en node.js y sus complementos, por lo que esta es probablemente una pregunta para principiantes.Conexión de cliente a servidor utilizando Socket.io

Estoy tratando de obtener una página HTML simple en un servidor web conéctese a un servidor diferente ejecutando node.js con websocket.io.

Mi código es el siguiente:

cliente

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

Puesta en marcha del servidor trabaja muy bien y funcionando http://localhost:8080 en mi navegador también funciona, volviendo 'Hola Socket Lover' como se esperaba. Pero quiero hacer una conversación de página diferente con los sockets, no ejecutar uno desde node.js.

Pero cuando lo ejecuto, no pasa nada y los retornos de la consola Chrome:

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

que he estado en esto durante todo el día. ¿Alguna ayuda?

Respuesta

34

¿Ha intentado cargar la secuencia de comandos socket.io no desde una URL relativa?

Estás usando:

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

Y:

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

debería probar:

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

Y:

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

Cambie localhost:8080 con lo que se ajuste a su configuración actual.

Además, dependiendo de su configuración, es posible que tenga algunos problemas para comunicarse con el servidor al cargar la página del cliente desde un dominio diferente (política de mismo origen). Esto puede superarse de diferentes maneras (fuera del alcance de esta respuesta, google/SO).

10

usted necesita para asegurarse de que se agrega barra diagonal antes de su enlace a Socket.IO:

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

A continuación, en la vista/controlador acaba de hacer:

var socket = io.connect() 

Eso debería resolver su problema .

+9

'var socket = io()' –

Cuestiones relacionadas