2012-04-19 27 views
8

Tengo el siguiente server.js en marcha:Node.js: Socket.IO vs express.static

module.exports = server; 

var express = require('express'); 
var fs = require('fs'); 

var server = express.createServer();  

var port = 58000; 
server.listen(port); 

var io = require('socket.io').listen(server); 

server.use(express.static('/', __dirname + '/../public')); 

server.use(express.logger()); 

io.on('connection', function(client){ 
    console.log('new client connected ' + client); 
    client.on('message', function(){ 
     console.log('client wants something'); 
    }); 
}); 

servidor express.static simple para los archivos de una subcarpeta/pública, además de socket.io funcionalidad. Con esta configuración, cualquier solicitud para el archivo '' socket.io.js falla, es decir,

http://localhost:58000/socket.io/socket.io.js 

devuelve un error 404 (archivo no encontrado). El servidor de archivos estáticos funciona correctamente. Si simplemente uso el módulo 'http' en lugar de 'express' (comentando las líneas express.static y express.logger) socket.io.js se sirve correctamente. ¿Cómo puedo combinar ambas funcionalidades?

Respuesta

0

Asegúrate de tener las últimas versiones de express.js y de socket.io.js. Mi lado que está funcionando muy bien con

[email protected] 
[email protected] 
[email protected] 

De lo contrario, una solución puede ser la de llamar var io = require('socket.io').listen(server); después de su server.use

+0

[email protected] puede no haber sido una buena idea ... trabajando ahora – daaanipm

+0

Oh, de hecho, hay algunos grandes problemas con Express @ 3, por el momento, sobre todo en el router y middleware, que están trabajando en eso. Debe limitarse a la versión estable (actual es @ 2.5.9), si no planea fork express.js – Tronix117

3

expreso 3.0.0 (lastest) cambiar su API.

Here es una pregunta muy similar a la suya que ofrece la respuesta.

var express = require('express') 
    , http = require('http'); 

var app = express(); 
var server = http.createServer(app); 
var io = require('socket.io').listen(server); 

... 

server.listen(8000);