2012-10-10 39 views
15

Estoy usando Socket.IO en un servidor de nodo con un servidor HTTP básico (no Express o Connect ni nada de eso). Por defecto, Socket.IO sirve el archivo del cliente aCambiar ruta de servicio de archivos estáticos Socket.IO

/socket.io/socket.io.js

Me gustaría ser capaz de cambiar esa ruta base a otra cosa, como

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

¿hay alguna manera integrada para realizar esta acción, o de cualquier manera sin cambiar el código de Socket.IO? Creo que la respuesta está en el módulo Static (require('socket.io').Static)), pero a falta de escribir el mío para reemplazar el predeterminado, no veo forma de ir y cambiar la forma en que se comporta.

¿Cómo puedo hacer esto?

Respuesta

21

El resource option le permite configurar el directorio raíz de socket.io. Por defecto es /socket.io.

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

Tenga en cuenta que este ajuste también afecta a donde los puntos finales de Socket.IO se sirven de, por lo también debe cambiar esta configuración en su código de cliente.

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

(Nota: no se utiliza una barra que lleva aquí por alguna razón.)

+2

Para quienes acaban de llegar, esto es para versiones anteriores a la 1.0. Para después de 1.0, vea [this] (http://stackoverflow.com/a/25438603/400654) answer. –

2

Puede encontrar el script del lado del cliente socket.io.js en la ruta node_modules/socket.io/node_modules/socket.io-client/dist. Copiarlo a una nueva carpeta y llamarla con la ruta correcta desde el cliente

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

Para más información, visite la configuración wiki

+0

Este fue el único que trabajó para mí. Tengo las cosas de node.js en un directorio totalmente diferente de la página estática .html. – erapert

+3

No downvoting, pero esta es la forma incorrecta de hacerlo.El mantenimiento y las actualizaciones (para el siguiente tipo, o para el futuro) se han incrementado. Un buen ejemplo para todos los que piensen sobre este tipo de cosas es una buena idea: este concepto se aplica a todos los complementos y extensiones: simplemente apóyate en el soporte nativo. Un dolor de cabeza ahora ahorrará muchos más tarde. – Ben

9

Si está utilizando la versión 1.0 socket.io , la configuración es diferente que en versiones anteriores.

Por el lado del cliente:

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

Por el lado del servidor

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

Para socket.io versión 1.2.1 , esto funciona para mí.

lado del servidor: lado

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

Cambié esto y ahora el registro de mi consola muestra llamadas GET excesivas, ¿podría haber hecho algo mal? – Josh

Cuestiones relacionadas