2013-01-15 19 views
7

Questa domanda riguarda le versioni di socket.io < 0.9.x. Le versioni più recenti hanno diversi trasporti e metodi per impostare i trasporti.node.js e socket.io. configurazione del tipo di trasporto per websocket?

I test nodo js e socket.io in due settimane. quando ho iniziato ho ricevuto il problema dalla funzione socket.send(message) nel client. Non riesco a inviare alcun messaggio al server. Ma posso ancora ricevere messaggi dal server. Ho risolto questo problema quando ho trovato il trasporto di configurazione del lato server:

socket.set('transports',[ 
    'xhr-polling' 
    , 'jsonp-polling' 
]); 

Tutto bene. Ora posso anche inviare messaggi al server. Ma ho ancora una domanda sul perché devo configurare il trasporto. Predefinito socket.io ambiente come questo trasporto uso websocket:

socket.set('transports', [ 
    'websocket' 
    , 'flashsocket' 
    , 'htmlfile' 
    , 'xhr-polling' 
    , 'jsonp-polling' 
]); 

in modo che utilizza websocket in un primo momento, non XHR-polling. Ma il server non può ricevere alcun messaggio inviato dal client quando si utilizza socket.send(msg) pari a socket.emit(...).

Quindi il problema è: cosa non supporta websocket qui? browser o node.js ... Mi dispiace ma ho cercato così tante pagine da google e non ho trovato una risposta per questo.

Io uso node.js versione 0.8.16, socket.io versione 0.9.13 e più recenti browser: Chrome, Firefox, Opera

voglio usare websocket non XHR-polling.

risposta

5

Questo è strano perché anche se i web socket non sono supportati dalla configurazione del server, socket.io selezionerà il prossimo miglior metodo disponibile (nel tuo caso xhr-polling). In realtà, non dovresti nemmeno aver bisogno di impostare quei trasporti come socket.io proverà ad usare "websocket" come metodo principale per impostazione predefinita. Questo potrebbe indicare qualche altro problema, possibilmente con il tuo codice?

Che cosa non supporta websockets non è sicuramente il browser che stai utilizzando nè node.js, naturalmente. Questo dipenderà dalla configurazione del tuo server.

Primo controllo:

  1. La porta che stai ascoltando è aperta nel firewall
  2. vostro server web supporta WebSockets. Se stai usando Apache e proxing vostra richiesta di un IP interno: PORT, websocket non funzionerà a meno di installare qualcosa come apache-websocket o pywebsocket

Che finalmente risolto il mio problema è stato quello di disabilitare Apache in ascolto sulla porta 80 e avendo node.js in ascolto su quella porta. Ecco la risposta su SO che mi ha aiutato: https://stackoverflow.com/a/7640966/2347777