|
|
- 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<endt+Time::Span.new(0,0,4)
- scurr = Time.now
- Fiber.yield
- end
-
- puts "avg: "+(total/cnt_r.get).to_s
- puts "min: "+min.to_s
- puts "max: "+max.to_s
- puts "cnt_s: "+cnt_s.get.to_s
- puts "cnt_r: "+cnt_r.get.to_s
- puts "rps: "+(cnt_r.get/duration.seconds).to_s
|