tutorial socket rooms example javascript node.js socket.io connect

javascript - socket - Evitar que favicon.ico haga una segunda solicitud-Node.js



socket.io express (1)

Estoy tratando de evitar que el formulario favicon.ico haga una segunda solicitud cuando se conecta un socket.

Aquí está mi servidor:

var io = require(''socket.io''), connect = require(''connect''); var app = connect() .use(connect.static(''public'')) .use(function(req, res, next){ if (req.url === ''/favicon.ico'') { res.writeHead(200, {''Content-Type'': ''image/x-icon''} ); next(); } }) .use(function(req, res){ res.end(''stupid favicon...''); }).listen(3000); var game = io.listen(app); game.sockets.on(''connection'', function(socket){ socket.emit(''entrance'', {message: ''Welcome to the game!''}); socket.on(''disconnect'', function(){ game.sockets.emit(''exit'', {message: ''A player left the game...!''}); }); game.sockets.emit(''entrance'', {message: ''Another gamer is online!''}); });

Parece que esto no funciona. No recibo ningún error, pero cuando se conecta un socket, se cargan dos imágenes desde el lado del cliente, lo que hace que parezca que todavía hay dos solicitudes.

Entonces, ¿mi código está completamente equivocado o estoy en el camino correcto? Porque no importa lo que console.log() en mi código de servidor, nada se imprime en la consola.

EDITAR: lado del cliente

var socket = io.connect(''http://localhost:3000''); socket.on(''entrance'', function(data){ console.log(data.message); var num = (count > 0) ? count : ''''; console.log("hero" + num); var hero = new Car("hero" + num); hero.init(); count++; });

count es global. Tengo (por ahora dos imágenes), una #hero y #hero1 . Cuando un jugador se conecta, ambas imágenes se cargan.


Se supone que no debes llamar a next cuando quieras responder a una solicitud. En general, no es válido para writeHead() y luego llamar a next . La mayoría de los middleware esperan trabajar con una respuesta que todavía no se haya escrito en la red.

El motivo por el que se ejecuta el middleware "favicon estúpido" es que lo llamas invocando el next en el primero. Necesita res.writeHead() y res.end() O simplemente llame a next .

function(req, res, next){ if (req.url === ''/favicon.ico'') { res.writeHead(200, {''Content-Type'': ''image/x-icon''} ); res.end(/* icon content here */); } else { next(); } }

Alternativamente, solo use el middleware de favicon incorporado , que hace cosas importantes como establecer los encabezados de Cache-Control apropiados.