EventMachine Timer для каждого открытого соединения - PullRequest
0 голосов
/ 14 апреля 2020

Нам нужно, чтобы серверы EventMachine «пинговали» клиентов, подключенных к ним каждые несколько секунд.

EventMachine.run do
  config.each do |instance|
    case instance[:type]
    when 'A'
      EventMachine.start_server instance[:hostname], instance[:port_num], AServer, instance
      puts "#{Time.now.utc} :: A #{instance[:hostname]}/#{instance[:port_num]} :: Initialize"
    when 'B'
      EventMachine.start_server instance[:hostname], instance[:port_num], BServer, instance
      puts "#{Time.now.utc} :: B #{instance[:hostname]}/#{instance[:port_num]} :: Initialize"
    end
  end

Для клиентов, подключающихся к BServer, мы хотим отправлять им один символ каждые 10 секунд - как я могу создать экземпляр Timer для каждого запущенного сервера BServer?

1 Ответ

0 голосов
/ 14 апреля 2020

ОК, оказалось, что это было проще, чем я думал. В post_init способ реализации моего BServer я добавляю это:

EM.add_periodic_timer(10) do
  send_char('A')
end
...