require "socket" require "socket/udp_socket" require "json" total = 0 min = 1000000000 max = 0 cnt_s = Atomic(Int32).new(0) mutex_s = Mutex.new cnt_r = Atomic(Int32).new(0) mutex_r = Mutex.new start = Time.now duration=Time::Span.new(0,0,45) endt = start+duration (1..10).each do spawn do soc = UDPSocket.new soc.connect "localhost", 3000 mutex = Mutex.new curr=Time.now spawn do curr2=Time.now while endt+Time::Span.new(0,0,4)>curr2 begin message : String | Nil = nil mutex.synchronize do message, addr = soc.receive end mess = JSON.parse message.not_nil! t = Time.now.to_unix_f - mess["curr"].as_f mutex_r.synchronize do min = Math.min(min, t) max = Math.max(max, t) total += t cnt_r.add 1 end rescue puts message end curr2=Time.now Fiber.yield end end curr=Time.now while endt+Time::Span.new(0,0,4)>curr data = Hash{"user" => "dummy@example.org", "api_token" => "576231a1-18e6-4fbd-b058-b9d23fa1b456", "curr" => curr.to_unix_f}.to_json mutex.synchronize do soc.send data end cnt_s.add 1 curr = Time.now Fiber.yield end end end scurr=Time.now while scurr