Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

flashsocket on socketio and nodejs not working

flashsocket on socketio and nodejs not working

Problem

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 :

...

...
            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 :

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

Problem courtesy of: jerome

Solution

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.

Solution courtesy of: jerome

Discussion

View additional discussion.



This post first appeared on Node.js Recipes, please read the originial post: here

Share the post

flashsocket on socketio and nodejs not working

×

Subscribe to Node.js Recipes

Get updates delivered right to your inbox!

Thank you for your subscription

×