tutorial socket rooms node example node.js sockets socket.io socket.io-1.0

node.js - rooms - La conexión de Socket.io revierte a sondeo, nunca desconecta el manejador de ''conexión''



socket.io express (2)

No sé, si ese es su problema, pero mi ojo se quedó pegado en su etiqueta de script html, con esa ruta de origen de la js.

<script src="/socket.io/socket.io.js"></script>

Creo que el manejo de la carpeta no es correcto. Debería ser:

<script src="./socket.io/socket.io.js"></script>

O tal vez:

<script src="socket.io/socket.io.js"></script>

Porque en mi opinión, el "/" al principio se refiere a la carpeta raíz. El "./" se refiere al directorio actual y el siguiente, pero simplemente el nombre de la carpeta y luego el js dentro deberían hacer el truco.

Por lo tanto, su código de nodo es correcto, pero el html del lado del cliente no incluye su script.

Estoy intentando agregar socket.io a mi aplicación node.js existente en express. He agregado la biblioteca socket.io en el servidor de la siguiente manera (directamente siguiendo http://socket.io/get-started/chat/ ):

var express = require(''express'') , http = require(''http'') , path = require(''path'') , fs = require(''fs''); var app = express(); var http = http.Server(app); var io = require(''socket.io'')(http); // Express settings [...] // Express routes [...] // Socket.io Communication io.on(''connection'', function(socket) { console.log(''a user connected''); }); // Start server app.listen(config.port, function () { console.log(''Express server listening on port %d in %s mode'', config.port, app.get(''env'')); });

En este momento, en el front-end simplemente estoy haciendo una conexión:

<script src="/socket.io/socket.io.js"></script> <script> var io = io(); </script>

Pero en lugar de mostrar "un usuario conectado" en la consola, la consola registra una secuencia continua de encuestas. Estoy usando la última versión de Chrome en Mac, que admite websockets.

GET /socket.io/?EIO=2&transport=polling&t=1402521519446-91 200 94ms - 6.96kb GET /socket.io/?EIO=2&transport=polling&t=1402521519447-92 200 93ms - 6.96kb GET /socket.io/?EIO=2&transport=polling&t=1402521519485-93 200 53ms - 6.96kb GET /socket.io/?EIO=2&transport=polling&t=1402521519580-94 200 143ms - 6.96kb GET /socket.io/?EIO=2&transport=polling&t=1402521519582-95 200 144ms - 6.96kb GET /socket.io/?EIO=2&transport=polling&t=1402521519633-96 200 40ms - 6.96kb GET /socket.io/?EIO=2&transport=polling&t=1402521519778-97 200 92ms - 6.96kb GET /socket.io/?EIO=2&transport=polling&t=1402521519780-98 200 92ms - 6.96kb GET /socket.io/?EIO=2&transport=polling&t=1402521519818-99 200 36ms - 6.96kb GET /socket.io/?EIO=2&transport=polling&t=1402521519912-100 200 81ms - 6.96kb [etc]

Debo estar haciendo algo mal. Soy bastante nuevo en esto, y me encantaría que me señalaran en la dirección correcta. Avíseme si necesito profundizar en cualquier parte de esta pregunta.

¡Gracias! - Eduardo

===========

EDITAR:

Aquí está la configuración rápida que estoy usando actualmente. Probé los mismos pasos en una aplicación de nodos completamente nueva y parecía funcionar bien, así que me pregunto si algo de esto podría ser el problema.

app.configure(''development'', function(){ app.use(require(''connect-livereload'')()); // Disable caching of scripts for easier testing app.use(function noCache(req, res, next) { if (req.url.indexOf(''/scripts/'') === 0) { res.header(''Cache-Control'', ''no-cache, no-store, must-revalidate''); res.header(''Pragma'', ''no-cache''); res.header(''Expires'', 0); } next(); }); app.use(express.bodyParser({limit: ''50mb''})); // increase limit for audio recordings app.use(express.static(path.join(config.root, ''.tmp''))); app.use(express.static(path.join(config.root, ''app''))); app.use(express.errorHandler()); app.use(express.logger(''dev'')); util.logger.add(loggly, { [...Credentials...] }); app.set(''views'', config.root + ''/app/views''); });


Tuve el mismo problema y la forma en que lo resolví fue reemplazando este

// Start server app.listen(config.port, function () { console.log(''Express server listening on port %d in %s mode'', config.port, app.get(''env'')); });

con este:

// Start server http.listen(config.port, function () { console.log(''Express server listening on port %d in %s mode'', config.port, app.get(''env'')); });

Este post explica por qué: https://.com/a/17697134/1515130