2010-08-11 26 views
5

no puedo obtener los eventos del cliente al fuego, por favor ver el código/explicación:Node.js websockets Socket.IO

bien, así que tengo este trabajo (creo)

Cliente código -side:

<script src="./Socket.IO/socket.io.js"></script> 
<script> 
    io.setPath('./Socket.IO/'); 

    var socket = new io.Socket('jayz.danstanhope.webfactional.com', { 'port': 80 }); 

    socket.on('connect', function() { 
     alert('connect'); 
    }); 
    socket.on('message', function (msg) { 
     alert('message' + msg); 
    }); 
    socket.on('close', function() { 
     alert('close'); 
    }); 
    socket.on('disconnect', function() { 
     alert('disconnect'); 
    }); 
    socket.connect(); 

</script> 

código del lado del servidor:

var sys = require("sys") 
    , fs = require("fs") 
    , path = require("path") 
    , http = require("http"); 
var io = require('/home/danstanhope/webapps/htdocs/Socket.IO-node'); 

var server = http.createServer(function (req, res) { 
    //your normal server code 
    res.writeHead(200, { 'Content-Type': 'text/html' }); 
    res.write('Hello world'); 
    res.end(); 
}); 

server.listen(26970); 
server = io.listen(server); 
server.on('connection', function(client){ 
    sys.log('client connected'); 
}); 

Cuando actualiza la página en Chrome puedo ver los registros de estar IRG tten en Shell.

Esto es lo que veo:

[email protected] htdocs]$ node server.js 
9 Aug 19:19:37 - socket.io ready - accepting connections 
9 Aug 19:19:40 - Initializing client with transport "websocket" 
9 Aug 19:19:40 - Client 21789167495444417 connected 
9 Aug 19:19:40 - client connected 
9 Aug 19:19:40 - Client 21789167495444417 disconnected 

El único problema ahora es conseguir cualquiera de los javascript alertas de socket al fuego.

Además, este error está apareciendo en Chrome:

Bad Upgrade header: Server: nginx 

Date: Wed, 11 Aug 2010 23:06:06 GMT 

Transfer-Encoding: chunked 

Connection: keep-alive 

Upgrade: WebSocket 

¿Alguna idea sobre cómo solucionar un "mal encabezado"?

Gracias, Dan

Respuesta

0

Al no tener idea acerca de websockets en absoluto, pero en el código de cliente que inicializar el zócalo con el puerto 80, pero que indicar al servidor que escucha en el puerto 26970.

+0

Hey, eso es porque estoy reenviar el puerto a 26970. Así que creo que Funcionará bien Gracias de todos modos aunque :) – Dan

-3

Bastante seguro de que el método nombre es "addEvent", no "sobre", aunque "on" sin duda ser más "nodo-y" :)

socket.addEvent('connect', function() { 
    alert('connect'); 
}); 
socket.addEvent('message', function (msg) { 
    alert('message' + msg); 
}); 
socket.addEvent('close', function() { 
    alert('close'); 
}); 
socket.addEvent('disconnect', function() { 
    alert('disconnect'); 
}); 
+0

Muchas gracias por la respuesta, Eso no lo fijan aunque :( misma edición, los eventos no disparar. – Dan

+4

En realidad .en es correcta. –

2

A partir de ahora, no es posible aprovechar websockets de una máquina nginx. Esto puede haberse corregido recientemente, pero toda mi investigación dice que nginx y Apache no pueden alojar websockets en este momento. Parece que la mayoría de los proxies inversos no están de acuerdo con websockets.

Can nginx be used as a reverse proxy for a backend websocket server?

2

Tenía este problema exactamente el mismo hace un tiempo y el problema terminó siendo causado por dos versiones diferentes de socket.io. Usé npm para importar una versión y luego obtuve la versión del lado del cliente en github de un desarrollador diferente y eran incompatibles. Verifique dos veces que no está inadvertidamente usando el tenedor de otra persona.

3

Puede proxy las solicitudes HTML estándar con nginx pero no los websockets ni la conexión de flashsockets debido al hecho de que nginx aún no puede reenviar el tráfico no HTTP 1.0 a través de un proxy.Así websockets son un no ir y Flash no será capaz de enviar su política de crossdomain como se ve un poco como esto:

<policy-file-request/>\x00 

Qué Nginx felizmente arroja un error HTTP 400 en.

Con el fin de hacer que funcione, debe conectar el cliente al puerto de su aplicación Node.js está escuchando en:

<script src="./Socket.IO/socket.io.js"></script> 
<script> 
    io.setPath('./Socket.IO/'); 

    var socket = new io.Socket('jayz.danstanhope.webfactional.com', { 'port': 26970 }); 

    socket.on('connect', function() { 
     alert('connect'); 
    }); 
    socket.on('message', function (msg) { 
     alert('message' + msg); 
    }); 
    socket.on('close', function() { 
     alert('close'); 
    }); 
    socket.on('disconnect', function() { 
     alert('disconnect'); 
    }); 
    socket.connect(); 

</script>