I'm trying to get a server set up with socket.io, with bad results.
I am mostly following this guide, although it's somewhat out of date: http://www.williammora.com/2013/03/nodejs-tutorial-building-chatroom-with.html
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.
127.0.0.1 - - [Thu, 17 Jul 2014 00:51:36 GMT] "GET /socket.io/?EIO=2&transport=polling&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&transport=polling&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&transport=polling&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"
Server
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." ); });
Client
script( src="js/socket.io.js" ) var socket = io.connect( "http://localhost:8080" );
I got the client js file from: node_modules/socket.io/node_modules/socket.io-client/socket.io.js
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.
Any help here?
EDIT For additional information, here is my folder hierarchy:
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
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.
First and foremost, please note that disconnections are common and expected, even on a stable Internet connection: anything between the user and the Socket.IO server may encounter a temporary failure or be restarted.
The bidirectional channel between the Socket.IO server (Node. js) and the Socket.IO client (browser, Node. js, or another programming language) is established with a WebSocket connection whenever possible, and will use HTTP long-polling as fallback.
On the first item, there is no coded limit to how many event handlers a socket.io server can handle. A socket derives from an EventEmitter and it uses the EventEmitter's listener capabilities to allow someone to listen for events.
It looks like Socket.IO can't intercept requests starting with /socket.io/
. This is because in your case the listener is app
-- an Express handler. You have to make http
be listener, so that Socket.IO will have access to request handling.
Try to replace
app.set( "ipaddr", "127.0.0.1" ); app.set( "port", 8080 );
with
http.listen(8080, "127.0.0.1");
See docs for details: http://socket.io/docs/#using-with-express-3/4
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With