2015-10-17 17 views
14

Attualmente sto lavorando con Socket.IO fro nodejs per condividere alcune informazioni in tempo reale tra un server e alcuni client. I client dovrebbero comunicare solo con il server, non tra loro.Socket.IO senza server http?

Su Windows tutto va bene e posso condividere le informazioni, ma dato che mette le cose su un Linux vps, ho avuto il problema che ha iniziato tutto su un socket ipv6 che mi rendeva difficile connettermi con il browser clientide libary da socket.io

comincio il server in questo modo:

io = require('socket.io').listen(3000); 

wich funzionava bene, e ho potuto collegare. Ora sui vps linux ho cercato di evitare che IPv6 utilizzando un indirizzo IPv4 come questo

io = require('socket.io').listen(3000, '0.0.0.0'); 

ma che non ha funzionato, non su Linux e non su Windows. Egli non si lega la presa per l'ip che voglio a meno che io uso il server http in questo modo:

http = require('http').createServer().listen(3000, '0.0.0.0'); 
io = require('socket.io').listen(http); 

Ora la mia domanda è, devo utilizzare il server http per risolvere il problema di legare la presa di l'ip e la porta locali giusti o c'è qualche altra soluzione? E socketio avvia un server http in background in caso di mia prima linea di codice, in quanto è un socket Web, o funziona senza il server http?

La ringrazio molto :)

risposta

20

Socket.io, e WebSockets in generale, richiedono un server HTTP per la stretta di mano iniziale. Quindi, anche se non si fornisce Socket.io con un server http, ne creerà uno per te.

Il problema è che il secondo parametro nel tuo io.listen(3000, '0.0.0.0') viene ignorato da Socket.io. Stai meglio andando con il tuo ultimo frammento poiché è essenzialmente esattamente ciò che Socket.io fa dietro le quinte. L'unica vera differenza è che puoi controllare quale interfaccia ascoltare.

+0

Grazie mille, questo mi aiuta molto + 1 – Arkensor