2011-05-02 25 views
5

He estado luchando todo el día tratando de hacer que este simple ejemplo funcione usando socket.io. Intenté inicialmente con Windows 7 con Cygwin. Desde entonces también han probado OS X, con el mismo resultado.Ejemplo simple nodeJS no funciona con socket.io

Cuando se ejecuta la secuencia de comandos, se muestra este ...

2 May 20:57:47 - socket.io ready - accepting connections 

Sin embargo, visitar la página index.html doesnt mostrar un cliente incluso se ha conectado.

index.html

<html> 
<head> 
<script type="text/javascript" src="socket.io.js"></script> 
<script type="text/javascript"> 
    var socket = new io.Socket('localhost',{'port':8090}); 

    socket.connect(); 

    socket.on('connect', function(){ 
     console.log('connected'); 
     socket.send('hi!'); 
    }); 

    socket.on('message', function(data){ 
     console.log('message recived: ' + data); 
    }); 

    socket.on('disconnect', function(){ 
     console.log('disconected'); 
    }); 
</script> 
</head> 
<body></body> 
</html> 

server.js

var http = require('http'), io = require('socket.io'), 

server = http.createServer(function(req, res){ 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    res.end('<h1>Hello world</h1>'); 
}); 
server.listen(8090); 

var socket = io.listen(server); 
socket.on('connection', function(client){ 
    console.log('client connected'); 

    client.on('message', function(){ 
     console.log('message arrive'); 
     client.send('some message'); 
    }); 

    client.on('disconnect', function(){ 
     console.log('connection closed'); 
    }); 
}); 

¿Alguna idea sobre lo que podría estar haciendo mal? No se muestran mensajes de consola en absoluto. Notablemente, cuando uso Firebug para mirar la página index.html, no se están incrustando scripts, lo cual es extraño. No estoy seguro de qué podría estar causando eso.

Respuesta

8

No está sirviendo socket.io.js (o el archivo flash).

me gustaría recomendar el uso de la CDN:

<script src="http://cdn.socket.io/stable/socket.io.js"></script>

o alternativamente usar express para servir el archivo socket.io.js.

edición:

err tener que mirar más cerca se está sirviendo tampoco index.html expresar de nuevo podría funcionar, pero por el simple ejemplo:

var fs = require('fs'); 
var index = fs.readFileSync('index.html'); 
//note the readFileSync is done only in the first tic 
. 
. 
. 
res.writeHead(200, {'Content-Type': 'text/html'}); 
res.end(index); 
+0

En realidad, hay algunos problemas al usar la versión de CDN ... para mí los websockets no funcionaron. Sugiero que se quede con la versión local – noli

+0

¡Ah, eso fue todo! Inicialmente estaba usando Express, pero volví a http para aislar el problema. He vuelto para expresar y comencé a usar la función app.configure ('desarrollo'). ¡Gracias por tu ayuda! – crawf

9

No está cargando correctamente la biblioteca de socket.io en su archivo index.html. Pruebe esto:

<script type="text/javascript" src="http://localhost:8090/socket.io/socket.io.js"></script> 
+0

¡Muchas gracias, no sabía lo que estaba haciendo mal! – thomaux

+0

+1, forma correcta y mejor que obtener secuencias de comandos desde el host remoto. –

0

sí, y comentar la siguiente línea:

// server.listen(8090); 
1

¡Utilice esto en el lado del cliente como la ruta!

<script type="text/javascript" src="/socket.io/socket.io.js"></script>