2012-10-10 10 views
15

Sto usando Socket.IO su un server Node con un server HTTP di base (senza Express o Connect o qualcosa del genere). Per impostazione predefinita, Socket.IO serve il file del client perCambia percorso socket Socket.IO statico

/socket.io/socket.io.js

mi piacerebbe essere in grado di cambiare la situazione percorso di base a qualcos'altro, come

/foo/bar/socket.io/socket.io.js

c'è un modo incorporato per fare questo, o in qualsiasi modo senza modificare il codice di Socket.IO? Penso che la risposta risieda nel modulo Static (require('socket.io').Static)), ma in mancanza di scrivere il mio per sostituire l'impostazione predefinita, non vedo alcun modo per andare e cambiare il modo in cui si comporta.

Come posso fare questo?

risposta

21

Il resource option consente di configurare le directory principale del socket.io. Il valore predefinito è /socket.io.

var io = require('socket.io').listen(app, { resource: '/foo/bar/socket.io' }); 

Si noti che questa impostazione influisce anche il luogo dove gli endpoint di socket.io sono serviti da, in modo è necessario anche modificare questa impostazione nel codice client.

var socket = io.connect('http://example.com', { resource: 'foo/bar/socket.io' }); 

(Nota non usiamo una barra che porta qui per qualche motivo.)

+2

Per quelli che stanno appena arrivando, questo è per le versioni precedenti alla 1.0. Per dopo 1,0, vedere [questo] (http://stackoverflow.com/a/25438603/400654) risposta. –

2

È possibile trovare lo script lato client socket.io.js nel percorso node_modules/socket.io/node_modules/socket.io-client/dist. Copiarlo in una nuova cartella e chiamarla con il percorso corretto dal client

<script src="/your/path/to/socket.io.js"></script> 

Per ulteriori visita configurazione wiki

+0

Questa era l'unica cosa che ha funzionato per me. Ho la roba node.js in una directory totalmente diversa dalla pagina .html statica. – erapert

+3

Non downvoting, ma questo è il modo sbagliato per farlo.La manutenzione e gli aggiornamenti (per il prossimo, o per il futuro) hanno appena fatto aumentare la loro difficoltà. Un amichevole BTW per tutti gli altri che pensano questo tipo di cose è una buona idea: questo concetto si applica a tutti i plugin e le estensioni - basta attenersi al supporto nativo. Un mal di testa ora salverà molti dopo. – Ben

9

Se si utilizza socket.io versione 1.0, la configurazione è diverso rispetto alle versioni precedenti.

Per il lato client:

var socket = io.connect('http://localhost:8888', { path: '/some/path/socket.io' }); 

Per lato server

var socket = require("socket.io")({ resource: '/some/path/socket.io' }); 
12

Per socket.io versione 1.2.1 , questo funziona per me.

lato server: lato

var io = require('socket.io')({path: '/foo/bar'}); 

Cliente:

var socket = io.connect('http://example.com', {path: '/foo/bar'}); 

FYI: http://socket.io/docs/migrating-from-0-9/#configuration-differences

+0

Ho cambiato questo e ora il mio registro della console mostra le chiamate GET eccessive, potrei aver fatto qualcosa di sbagliato ?? – Josh