Socket.IO 1.1.0

Today we pushed version 1.1.0 of Socket.IO with a lots of bug fixes and some new additions. This release comes thanks to the work of more than 20 contributors.

Server

  • hasBin no longer iterates over object prototypes (GH#1645) [kevin-roark]
  • Enhanced font styles in the chat example app (GH1653) [acusti]
  • Fixed etag header in server socket.io.js (GH#1655) [ysmood]
  • Fixed repo url in package.json (GH#1673) [bryanburgers]
  • Improved namespace and disconnection tests (GH) [guille]
  • Fixed possible crash on reconnect due to referencing deleted object property (GH#1682) [kevin-roark]
  • Emitting error packet when connecting to non-existing namespace (GH#1688) [fdellabetta]
  • Fixed room removal logic when leaving a room, props (GH#1697) [Marreck]
  • Faster git checkout in travis and SVG travis badge, (GH#1714, GH#1713) [PeterDaveHello]
  • No double utf8 encoding of packets on websocket transport (GH#322) [rase-]
  • Fixed binary decode memory leak (GH#27,GH#28) [christophwitzko, rase-]
  • Better utf8 error handling (GH#29) [nkzawa]
  • Fixed memory leak in websocket usage (GH, GH) [guille, nicokaiser]
  • Possibility to cleanly close the server (GH#1646) [narcisoguillen]
  • Declaring namespaces without the / prefix possible (GH#1729) [asyncanup]
  • The remoteAddress property on the connection is now cached so it should always be accessible (GH#270) [rase-]

Client

  • Better utf8 error handling (GH#316) [nkzawa]
  • reconnect_failed event is now fired only once in socket.io-client (GH#708) [rase-]
  • autoConnect option in socket.io-client, making it possible to disable connecting without explicitly calling manager.open (GH#680, GH#728) [FredyC, nkzawa]
  • Our tests are faster and better than ever using the travis build matrix (GH, GH#335) [tootallnate, rase-, guille]
  • It is now possible to disable JSONP as a transport (GH#314) [rase-]
  • You can now use XDomainRequest to avoid loading bar flashing in IE8 (GH#331 GH#333 GH#334) [yujiosaka]

Here are some examples of what you can do with the new features:

It is now possible to cleanly close the socket.io server like so:

var app = require('http').createServer();
var io = require('socket.io')(app);
var fs = require('fs');

app.listen(3333, function() {
  io.close();
});

Namespaces can be declared without the / prefix:

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

// '' and '/' are equal
io.of('').on('connection', function(){
  // Connecting to '/' will do the trick
});
// 'abc' and '/abc' are equal
io.of('abc').on('connection', function(){
  // Connecting to '/abc' will do the trick
});

There’s now an auto connect option in socket.io-client, making it possible to disable connecting without explicitly calling manager.open.

var manager = io.Manager('http://localhost:9823', { autoConnect: false });
setTimeout(function(){
  manager.open(); // Won't start connecting until now
}, 500);

Our tests are faster and better than ever using the travis build matrix!
build

You can find the example build here!

The remoteAddress property on the connection is now cached so it should always be accessible. It can be accessed either in the handshake object, or directly from engine.io:

io.on('connection', function(socket){
  console.log(socket.handshake.address);
  console.log(socket.client.conn.remoteAddress);
});

It is now possible to disable JSONP as a transport. If disabled (by settings to false) an error will be emitted (saying “No transports available”) if no other transports can form a connection. If another transport is available for opening a connection (e.g. WebSocket) that transport will be used instead.

var socket = require('engine.io-client')('ws://localhost', { jsonp: false });
socket.on('open', function(){
  socket.on('message', function(data){});
  socket.on('close', function(){});
});

You can now use XDomainRequest to avoid loading bar flashing in IE8:

var socket = require('engine.io-client')('ws://localhost', { enablesXDR: true });
socket.on('open', function(){
  socket.on('message', function(data){});
  socket.on('close', function(){});
});

The option defaults to false because XDomainRequest has a known flaw of not sending cookies.

Socket.IO-client 1.1.0 can be found in the Socket.IO CDN:

<script src="https://cdn.socket.io/socket.io-1.1.0.js"></script>

A big thank you to everyone who participated in the making of the release by reporting issues, getting involved in discussion, and/or contributing code. Keep being awesome, and stay tuned for more updates!