title: socket.io - can't get it to work, having 404's on some kind of polling call
body: <p>I'm trying to get a server set up with socket.io, with bad results.</p>
  
  <p>I am mostly following this guide, although it's somewhat out of date:
  <a href="http://www.williammora.com/2013/03/nodejs-tutorial-building-chatroom-with.html">http://www.williammora.com/2013/03/nodejs-tutorial-building-chatroom-with.html</a></p>
  
  <p>The problem comes with socket.io, I'm not sure if it's client or server side. It appears to be trying to continuously poll the server, but is getting 404's back. That sounds like socket.io isn't running, but it all looks okay to me. It may also have something to do with paths and having a "public" directory, but I don't really know.</p>
  
  <pre><code>127.0.0.1 - - [Thu, 17 Jul 2014 00:51:36 GMT] "GET /socket.io/?EIO=2&amp;transport=polling&amp;t=1405558296120-0 HTTP/1.1" 404 73 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4"
  127.0.0.1 - - [Thu, 17 Jul 2014 00:51:37 GMT] "GET /socket.io/?EIO=2&amp;transport=polling&amp;t=1405558297181-1 HTTP/1.1" 404 73 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4"
  127.0.0.1 - - [Thu, 17 Jul 2014 00:51:39 GMT] "GET /socket.io/?EIO=2&amp;transport=polling&amp;t=1405558299207-2 HTTP/1.1" 404 73 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4"
  </code></pre>
  
  <p><strong>Server</strong></p>
  
  <pre><code>var exec = require( "child_process" ).exec;
  var path = require( "path" );
  var morgan = require( "morgan" );
  var bodyParser = require( "body-parser" );
  var _ = require( "underscore" );
  var express = require( "express" );
  var app = express();
  var http = require( "http" ).createServer( app );
  var io = require( "socket.io" )( http );
  
  app.set( "ipaddr", "127.0.0.1" );
  app.set( "port", 8080 );
  
  //support JSON, urlencoded, and multipart requests
  app.use( bodyParser() );
  
  //log the requests using morgan
  app.use( morgan() );
  
  //specify the Jade views folder
  app.set( "views", __dirname + "/../views" );
  
  //set the view engine to Jade
  app.set( "view engine", "jade" );
  
  //specify static content
  app.use( express[ "static" ]( "public", __dirname + "/../public" ) ); //using map-access of static so jslint won't bitch
  
  io.on( "connection", function( socket )
  {
      console.log( "A user connected." );
  });
  </code></pre>
  
  <p><strong>Client</strong></p>
  
  <pre><code>script( src="js/socket.io.js" )
  var socket = io.connect( "http://localhost:8080" );
  </code></pre>
  
  <p>I got the client js file from:
  node_modules/socket.io/node_modules/socket.io-client/socket.io.js</p>
  
  <p>That path doesn't match either what the tutorial I'm using says, or what socket.io says to use, so maybe that's the problem, but it looks like it's probably the correct file.</p>
  
  <p>Any help here?</p>
  
  <p><strong>EDIT</strong>
  For additional information, here is my folder hierarchy:</p>
  
  <pre><code>Webserver/
      my_modules/
          server.js
      node_modules/
          body-parser/
          express/
          jade/
          morgan/
          socket.io/
          underscore/
      public/
          css/
          js/
              server.js
      views/
          index.jade
      index.js
      package.json
  </code></pre>
  
  <p>The server.js in the my_modules folder is where I start socket.io on the server side. The server.js in the js folder is the client code to connect from the website.</p>