2010-08-11 8 views
5

non posso ottenere gli eventi lato client al fuoco, si prega di vedere il codice/spiegazione:Node.js WebSockets Socket.IO

Va bene, così ho ottenuto questo lavoro (credo)

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

codice lato server:

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'); 
}); 

Quando mi aggiorna la pagina nel Chrome posso vedere i registri essendo WRI tten in Shell.

Ecco quello che vedo:

[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 

L'unico problema che ora sta diventando una di queste javascript avvisi di socket al fuoco.

Inoltre, questo errore sta rivelando in Chrome:

Bad Upgrade header: Server: nginx 

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

Transfer-Encoding: chunked 

Connection: keep-alive 

Upgrade: WebSocket 

Tutte le idee su come risolvere un "cattivo colpo di testa"?

Grazie, Dan

risposta

0

Non avendo idea di WebSockets a tutti, ma nel codice client si inizializzare la presa con la porta 80, ma vi dico il server in ascolto sulla porta 26970.

+0

Ehi, questo è perché sto inoltrare la porta a 26970. Quindi penso che Funzionerà bene. Grazie comunque però :) – Dan

-3

Abbastanza sicuro il metodo chiama "addEvent", non "a", sebbene "on" sarebbe sicuramente più "node-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

Grazie mille per la risposta, che non fissano però :( Stesso problema, gli eventi non sparare. – Dan

+4

realtà .on è corretta. –

2

A partire da ora, non è possibile sfruttare i socket Web da una macchina nginx. Questo potrebbe essere stato corretto di recente, ma tutte le mie ricerche dicono che nginx e Apache non possono ospitare websocket al momento. Sembra che la maggior parte dei proxy inversi non sia d'accordo con le websocket.

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

2

Ho avuto questo stesso problema esattamente un po 'indietro e il problema ha finito per essere causato da due diverse versioni di socket.io. Ho usato npm per importare una versione, poi ho ottenuto la versione lato client su github da uno sviluppatore diverso e non erano compatibili. Controlla che non stia inavvertitamente usando la forchetta di qualcun altro.

3

È possibile eseguire il proxy delle richieste HTML standard con nginx ma non con i websocket né con la connessione flashsocket, poiché nginx non è in grado di inoltrare il traffico HTTP 1.0 attraverso un proxy. Così WebSockets sono un no go e Flash non sarà in grado di inviare è la politica crossdomain come sembra un po 'come questo:

<policy-file-request/>\x00 

Quali Nginx felicemente solleva un errore HTTP 400 su.

Per farlo funzionare, è necessario collegare il cliente alla porta tua applicazione node.js è in ascolto:

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