Ruby Faye WebSocket,在触发关闭处理程序后重新连接到套接字

Ruby Faye WebSocket,在触发关闭处理程序后重新连接到套接字,ruby,websocket,eventmachine,faye,Ruby,Websocket,Eventmachine,Faye,我有一个超级简单的脚本,它包含了Faye WebSocket GitHub页面上用于处理关闭连接的内容: ws = Faye::WebSocket::Client.new(url, nil, :headers => headers) ws.on :open do |event| p [:open] # send ping command # send test command #ws.send({command: 'test'}.to_json)

我有一个超级简单的脚本,它包含了Faye WebSocket GitHub页面上用于处理关闭连接的内容:

 ws = Faye::WebSocket::Client.new(url, nil, :headers => headers)

  ws.on :open do |event|
    p [:open]
    # send ping command
    # send test command
    #ws.send({command: 'test'}.to_json)
  end 

  ws.on :message do |event|
    # here is the entry point for data coming from the server.
    p JSON.parse(event.data)
  end 

  ws.on :close do |event|
    # connection has been closed callback.
    p [:close, event.code, event.reason]
    ws = nil 
  end 

客户端空闲2小时后,服务器将关闭连接。一旦触发
ws.on:close
,我似乎找不到重新连接服务器的方法。有没有一个简单的方法?我只想让它在
:close
关闭后触发
ws.on:open

查找Faye Websocket客户端实现时,有一个
ping
选项,它会定期向服务器发送一些数据,从而防止连接闲置

# Send ping data each minute
ws = Faye::WebSocket::Client.new(url, nil, headers: headers, ping: 60) 
但是,如果您不想依赖服务器行为,因为即使您定期发送一些数据,它也可以完成连接,您可以将客户端设置放在一个方法中,然后在服务器关闭连接时重新启动

def start_connection
  ws = Faye::WebSocket::Client.new(url, nil, headers: headers, ping: 60)

  ws.on :open do |event|
    p [:open]
  end 

  ws.on :message do |event|
    # here is the entry point for data coming from the server.
    p JSON.parse(event.data)
  end 

  ws.on :close do |event|
    # connection has been closed callback.
    p [:close, event.code, event.reason]

    # restart the connection
    start_connection
  end
end

如果要避免超时:是否可以选择不时向服务器发送一些虚拟数据?这是否会导致多次重试后产生无限深的堆栈?我想知道在长期部署中使用它是否安全。不,因为这不是递归。