【问题标题】:Connecting through xhr-polling and jsonp-polling timeout通过 xhr-polling 和 jsonp-polling 超时连接
【发布时间】:2015-01-15 08:24:42
【问题描述】:

我尝试通过 websocket 和轮询运行我的 socket.io 程序,它们都可以工作。但是,当尝试运行 xhr-polling 时,它会超时。这可能是什么原因?

对于这个程序,我使用的是 socket.io 1.2.1。

var options = {"force new connection":true,
               "reconnect":false,
               "connect timeout":10000,
               "flash policy port":843,
               "auto connect":true,
               "path":"/sample/socket.io",
               "transports":["xhr-polling"]}

this.namespace = io.connect( 'http://localhost:8190/', options);

到目前为止,我的研究对这个问题一无所知。

编辑:

这是浏览器上的一段日志。

socket.io-client:url parse http://localhost:8190/ +0ms
socket.io.js:1284 socket.io-client ignoring socket cache for http://localhost:8190/ +0ms
socket.io.js:1284 socket.io-client:manager readyState closed +0ms
socket.io.js:1284 socket.io-client:manager opening http://localhost:8190/ +0ms
socket.io.js:3524 engine.io-client:socket creating transport "xhr-polling" +0ms
socket.io.js:1284 socket.io-client:manager connect attempt will timeout after 20000 +4ms
socket.io.js:1284 socket.io-client:manager readyState opening +1ms
socket.io.js:1284 socket.io-client:manager connect_error +3ms
socket.io.js:1284 socket.io-client:manager will wait 1000ms before reconnect attempt +2ms
socket.io.js:1284 socket.io-client:manager attempting reconnect +1s
socket.io.js:1284 socket.io-client:manager readyState closed +0ms
socket.io.js:1284 socket.io-client:manager opening http://localhost:8190/ +1ms
socket.io.js:1284 socket.io-client:manager connect attempt will timeout after 20000 +0ms

这段日志不断重复,同时不断增加超时。

【问题讨论】:

    标签: socket.io socket.io-1.0


    【解决方案1】:

    我发现这是因为 Socket.IO 版本 1.0+ 实际上不允许在 [websocket and polling] 之外设置传输。除非您在选项中将属性forceJSONP 和/或jsonp 设置为true,否则将轮询设置为您的传输默认设置为polling-xhr。

    换句话说,代码应该是:

    var options = {"force new connection":true,
                   "reconnect":false,
                   "connect timeout":10000,
                   "flash policy port":843,
                   "auto connect":true,
                   "path":"/sample/socket.io",
                   "transports":["polling"]}
    
    this.namespace = io.connect( 'http://localhost:8190/', options);
    

    还要注意,'auto connect' 现在是 autoConnect'force new connection' 现在是 forceNew'connect timeout' 现在是 timeout'reconnect' 现在是 'reconnection'

    var options = {forceNew :true,
                   reconnection :false,
                   timeout":10000,
                   "flash policy port":843,
                   autoConnect:true,
                   "path":"/sample/socket.io",
                   "transports":["polling"]}
    

    【讨论】:

      猜你喜欢
      • 2013-08-01
      • 2013-04-06
      • 2013-09-09
      • 2012-02-10
      • 2013-12-01
      • 2016-10-17
      • 1970-01-01
      • 2015-05-04
      • 2014-04-01
      相关资源
      最近更新 更多