I'm trying to get flashsocket working with socket.io but it does not, always going in xhr-polling fallback.
I don't see what I'm doing wrong, if anybody can help.
On server side :
var app = express.createServer(),
io = require('socket.io').listen(app, {
flashPolicyServer: true,
transports: ['flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']
});
app.listen(80);
On client side :
...
<script src="/socket.io/socket.io.js"></script>
...
socket = io.connect();
socket.on('connect', function(evt) {
console.log(socket.socket.transport.name);
onOpen(timeDifference(new Date(), earlierDate), socket.socket.transport.name);
earlierDate = new Date();
socket.on('disconnect', function(evt) {
onClose(evt);
});
socket.on('echo', function(msg) {
onEcho(msg);
});
socket.on('error', function(evt) {
onError(evt);
});
});
After that I checked that my browser chrome has flash enabled. I also checked that port 843 and 10843 are listening and responding :
<cross-domain-policy>
<allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>
On the server log, only get :
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized 14328044138726156
debug - setting request GET /socket.io/1/xhr-polling/14328044138726156?t=1333755740295
debug - setting poll timeout
debug - client authorized for
debug - clearing poll timeout
debug - xhr-polling writing 1::
debug - set close timeout for client 14328044138726156
debug - setting request GET /socket.io/1/xhr-polling/14328044138726156?t=1333755740299
debug - setting poll timeout
debug - clearing poll timeout
debug - xhr-polling writing 5:::{"name":"echo","args":["transport type : xhr-polling; and socket.id : 14328044138726156"]}
debug - set close timeout for client 14328044138726156
debug - discarding transport
debug - cleared close timeout for client 14328044138726156
debug - setting request GET /socket.io/1/xhr-polling/14328044138726156?t=1333755740303
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client 14328044138726156
debug - clearing poll timeout
debug - xhr-polling writing 8::
debug - set close timeout for client 14328044138726156`
Thanks for you help
In fact, it works !
Thanks to XHR, you lead me to more analyze and test so I could found by myself.
It works, but different as expected : When websocket is enabled on a browser, you cannot use flashsocket instead.
So even if you setup the server with : transports: ['flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']
your google chrome will never use flashsocket because it has websocket enabled and it falls back to xhr-polling.
But Internet explorer which doesn't have websocket enabled will use flashsocket.
And I have no need to setup socket.io without websocket so this behavior works for me.
Moreover I think this behavior is nice because it prevents loading heavy .swf files when you don't need them.
Jerome.