views:

289

answers:

1

This is a bit complicated but here goes.

I have a Rails app that has a small JS widget that gets updated on some backend processing stuff. The Rails app queues up a job in Redis (via Kthxbye) which gets processed and then once completed, fires off a redis publish message. This channel is being watched by a Node.JS server which is responsible for handling the notifications and updating the web front-end. This all works fine in a Google Chrome world where WebSockets work.

However both Firefox and IE have to default to other solutions because they don't support WebSockets (yet).

Currently it appears that both default to xhr-polling transport. From the Node.js logs. That's all well and good. However, on IE, it appears that there is an error in the transport/polling method. From the Node.js logs:

29 Sep 15:30:02 - Initializing client with transport "xhr-polling"
29 Sep 15:30:02 - Client 9219092682469636 connected
29 Sep 15:30:05 - Client 8440734834875911 disconnected
29 Sep 15:30:05 - Client 6149627515114844 disconnected
29 Sep 15:30:07 - Illegal transport "jsonp-polling"
29 Sep 15:30:07 - Illegal transport "jsonp-polling"

So it almost appears as though its connecting and as soon as it attempts to poll, it gets disconnected due to an "illegal transport" issue. Anyone know where that comes from?

A few other clues, the flash connector seems to load correctly, but I assume its not running or fails to load somehow as it still falls back to xhr-polling. From IE, I can see the following 3 requests are made every polling cycle:

GET /socket.io/xhr-polling//1285789236601 HTTP/1.1
Accept: */*
Origin: http://plukevdh-desktop:3000
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)
Host: itwebpriv1:8081
Connection: Keep-Alive
Cache-Control: no-cache

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 25
Access-Control-Allow-Origin: undefined
Connection: keep-alive

---

GET /socket.io/xhr-polling//1285789236616 HTTP/1.1
Accept: */*
Origin: http://plukevdh-desktop:3000
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)
Host: itwebpriv1:8081
Connection: Keep-Alive
Cache-Control: no-cache

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 24
Access-Control-Allow-Origin: undefined
Connection: keep-alive

---

GET /socket.io/jsonp-polling//1285789241616/0 HTTP/1.1
Accept: */*
Referer: http://plukevdh-desktop:3000/jobs/905390
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)
Accept-Encoding: gzip, deflate
Host: itwebpriv1:8081
Connection: Keep-Alive
A: 

Sounds to me like you have an older version of Socket.IO server which doesn't yet have jsonp-polling support. And a newer clientside version... Anyway in my experience that transport atm doesn't work very well anyway so don't bother with it. In IE, flashsocket should work and xhr-polling should work also, unless ofc you are running the S.IO server on another domain than your website. If you are using other port then xhr-polling won't work in Opera but should work in other browsers.

mrbrdo
I have been unable to get the FlashSocket API to takeover though. it always gets bypassed without explaination. it even appears to be loading the flash file but then it fails back to xhr polling with jsonp... Can you explain "If you are using other port then xhr-polling won't work..." plz?
Lukas
looks like it was a permissions issue that was failing run flashsockets. the latest version notifies of this. the risk of running on the edge I guess :)
Lukas