2010-09-29 77 views
3

这是有点复杂,但在这里。Socket.IO/Node.JS/Rails 3/IE

我有一个Rails应用程序,它有一个小的JS小部件,它在一些后端处理内容上得到更新。 Rails应用程序在Redis中排队工作(通过Kthxbye),该工作得到处理,然后一旦完成,就会触发redis发布消息。此通道正在由负责处理通知和更新Web前端的Node.JS服务器监视。这一切都适用于WebSockets工作的Google Chrome世界。

然而,Firefox和IE都必须默认使用其他解决方案,因为它们不支持WebSockets(还)。

目前看来,这两个默认xhr轮询运输。来自Node.js日志。这一切都很好。但是,在IE上,传输/轮询方法似乎存在错误。从Node.js的日志:

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" 

所以这几乎就像它的连接,一旦它试图轮询,它就会出现断线因“非法运输”的问题。任何人都知道这是从哪里来的?

其他一些线索,闪光灯连接器似乎正确加载,但我认为它没有运行或无法加载,因为它仍然回落到xhr轮询。从IE浏览器,我可以看到以下3个请求是由每一个轮询周期:

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 

回答

1

听起来像你对我有Socket.IO服务器的旧版本,其目前还没有JSONP轮询支持。还有一个更新的客户端版本......无论如何,根据我的经验,无论如何,运输atm都不能很好地工作,所以不要打扰它。在IE中,flashsocket应该可以工作,并且xhr-polling也可以工作,除非你在另一个域上运行S.IO服务器而不是你的网站。如果您使用的是其他端口,则xhr-polling在Opera中无法使用,但应在其他浏览器中使用。

+0

虽然我一直无法获得FlashSocket API接管。它总是被忽略而没有解释。它甚至似乎加载的Flash文件,但然后它失败回到xhr与jsonp投票...你能解释“如果你使用其他端口,然后xhr轮询将无法正常工作...”PLZ? – Lukas 2010-09-30 14:09:06

+0

看起来像是一个失败的运行flashsockets的权限问题。最新版本通知这一点。在边缘上跑步的风险我猜:) – Lukas 2010-10-12 14:59:40