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.

61 lines
1.2 KiB

5 years ago
  1. require "http/web_socket"
  2. require "json"
  3. total = 0
  4. min = 1000000000
  5. max = 0
  6. cnt_s = Atomic(Int32).new(0)
  7. mutex_s = Mutex.new
  8. cnt_r = Atomic(Int32).new(0)
  9. mutex_r = Mutex.new
  10. start = Time.now
  11. duration=Time::Span.new(0,0,45)
  12. endt = start+duration
  13. (1..10).each do
  14. spawn do
  15. soc = HTTP::WebSocket.new URI.parse("http://127.0.0.1:3000/socket/user/authenticate")
  16. soc.on_message do |message|
  17. begin
  18. mess = JSON.parse message
  19. t = Time.now.to_unix_f - mess["curr"].as_f
  20. mutex_r.synchronize do
  21. min = Math.min(min, t)
  22. max = Math.max(max, t)
  23. total += t
  24. cnt_r.add 1
  25. end
  26. rescue
  27. puts message
  28. end
  29. end
  30. spawn do
  31. soc.run
  32. end
  33. curr=Time.now
  34. while endt>curr
  35. data = Hash{"user" => "dummy@example.org", "api_token" => "576231a1-18e6-4fbd-b058-b9d23fa1b456", "curr" => curr.to_unix_f}.to_json
  36. soc.send data
  37. cnt_s.add 1
  38. curr = Time.now
  39. end
  40. end
  41. end
  42. scurr=Time.now
  43. while scurr<endt+Time::Span.new(0,0,4)
  44. scurr = Time.now
  45. Fiber.yield
  46. end
  47. puts "avg: "+(total/cnt_r.get).to_s
  48. puts "min: "+min.to_s
  49. puts "max: "+max.to_s
  50. puts "cnt_s: "+cnt_s.get.to_s
  51. puts "cnt_r: "+cnt_r.get.to_s
  52. puts "rps: "+(cnt_r.get/duration.seconds).to_s