Socket.IO 1.1.0 發布
今天Socket.IO的1.1.0版本發布。修復了大量的bug和一些新的補充。本次發布得益于超過20貢獻者的工作。
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 callingmanager.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]
以下是您可以使用新功能做了一些例子:
現在可以干凈地關閉socket.io服務器,如下所示:
var app = require('http').createServer();
var io = require('socket.io')(app);
var fs = require('fs');
app.listen(3333, function() {
io.close();
});
命名空間可以不需要/前綴來聲明:
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
});
現在有一個自動連接的socket.io客戶端選項,從而可以禁用連接沒有顯式調用manager.open。
var manager = io.Manager('http://localhost:9823', { autoConnect: false });
setTimeout(function(){
manager.open(); // Won't start connecting until now
}, 500);
我們的測試比以往任何時候都更快,更好使用travis構建矩陣!
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!