An authentication server
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

62 lines
1.2 KiB

require "http/web_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 = HTTP::WebSocket.new URI.parse("http://127.0.0.1:3000/socket/user/authenticate")
soc.on_message do |message|
begin
mess = JSON.parse message
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
end
spawn do
soc.run
end
curr=Time.now
while endt>curr
data = Hash{"user" => "dummy@example.org", "api_token" => "576231a1-18e6-4fbd-b058-b9d23fa1b456", "curr" => curr.to_unix_f}.to_json
soc.send data
cnt_s.add 1
curr = Time.now
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