title: Socket.io connection reverts to polling, never fires the 'connection' handler
body: <p>I'm trying to add socket.io to my existing node.js app on express. I've added the socket.io library in the server-side as follows (directly following <a href="http://socket.io/get-started/chat/" rel="noreferrer">http://socket.io/get-started/chat/</a>):</p>
  
  <pre><code>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'));
  });
  </code></pre>
  
  <p>Right now, on the front-end I am simply making a connection:</p>
  
  <pre><code>&lt;script src="/socket.io/socket.io.js"&gt;&lt;/script&gt;
  &lt;script&gt;
    var io = io();
  &lt;/script&gt;
  </code></pre>
  
  <p>But instead of showing "a user connected" in the console, the console logs a continuous stream of polls. I am using the latest version of Chrome on Mac, which supports websockets.</p>
  
  <pre><code>GET /socket.io/?EIO=2&amp;transport=polling&amp;t=1402521519446-91 200 94ms - 6.96kb
  GET /socket.io/?EIO=2&amp;transport=polling&amp;t=1402521519447-92 200 93ms - 6.96kb
  GET /socket.io/?EIO=2&amp;transport=polling&amp;t=1402521519485-93 200 53ms - 6.96kb
  GET /socket.io/?EIO=2&amp;transport=polling&amp;t=1402521519580-94 200 143ms - 6.96kb
  GET /socket.io/?EIO=2&amp;transport=polling&amp;t=1402521519582-95 200 144ms - 6.96kb
  GET /socket.io/?EIO=2&amp;transport=polling&amp;t=1402521519633-96 200 40ms - 6.96kb
  GET /socket.io/?EIO=2&amp;transport=polling&amp;t=1402521519778-97 200 92ms - 6.96kb
  GET /socket.io/?EIO=2&amp;transport=polling&amp;t=1402521519780-98 200 92ms - 6.96kb
  GET /socket.io/?EIO=2&amp;transport=polling&amp;t=1402521519818-99 200 36ms - 6.96kb
  GET /socket.io/?EIO=2&amp;transport=polling&amp;t=1402521519912-100 200 81ms - 6.96kb
  [etc]
  </code></pre>
  
  <p>I must be doing something wrong. I'm pretty new to this, and I'd love to be pointed in the right direction. Let me know if I need to elaborate on any part of this question.</p>
  
  <p>Thanks!
   - Edward</p>
  
  <p>===========</p>
  
  <h1>EDIT:</h1>
  
  <p>Here's the express settings I'm currently using. I tried the same steps on a completely new node app and it seemed to work fine, so I'm wondering if any of this might be the issue.</p>
  
  <pre><code>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');
  });
  </code></pre>