Socket.io与flask-socketio python。如何设置socket keepalive / timeout

时间:2014-11-26 21:29:27

标签: python websocket socket.io flask-socketio

我很难找到有关socket.io超时值的任何文档。我在客户端使用//cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js,在服务器端使用Flask-SocketIO。

以下是我创建套接字的方法:

namespace = '/coregrapher'

var socket = io.connect('http://' + document.domain + ':' + location.port + namespace);

socket.on('connect', function() {
    socket.emit('my event', {data: 'I\'m connected!'});
});

socket.on('my response', function(msg) {
    $('#result').append(msg.data);
});

问题是,如果服务器在一分钟内没有向客户端或visaversa发送任何内容,则客户端会断开连接,如果服务器尝试向客户端发送另一个,则会因客户端已断开连接而失败。如何让客户端保持连接?

谢谢!

2 个答案:

答案 0 :(得分:3)

您还可以使用Flask-SocketIO在服务器端设置参数:

socketio = SocketIO(ping_timeout=10, ping_interval=5)

:param ping_timeout: The time in seconds that the client waits for the
                     server to respond before disconnecting. The default is
                     60 seconds.
:param ping_interval: The interval in seconds at which the client pings
                      the server. The default is 25 seconds.

答案 1 :(得分:1)

大问题是,如果您的服务器在一段延长的时间内对保持活动的数据包没有响应,客户端将断开连接并尝试重新连接。如果它无法重新连接,最终会停止尝试。

也就是说,如果要修改重试逻辑的配置,则可以将选项对象作为第二个参数发送到.connect()调用。根据文档here,可以控制以下选项:

  

选项:

     
      
  • 重新连接是否自动重新连接(true)
  •   
  • reconnectionDelay在尝试重新连接之前等待多长时间(1000)
  •   
  • reconnectionDelayMax重新连接之间等待的最长时间(5000)。每次尝试都会增加重新连接   由reconnectionDelay指定的金额。
  •   
  • 发出connect_error和connect_timeout事件之前的超时连接超时(20000)
  •   

因此,如果您希望它在更长的时间内继续尝试自动重新连接,您可以增加最后三个选项的时间。