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.

75 lines
1.4 KiB

5 years ago
  1. require "socket"
  2. require "socket/udp_socket"
  3. require "json"
  4. total = 0
  5. min = 1000000000
  6. max = 0
  7. cnt_s = Atomic(Int32).new(0)
  8. mutex_s = Mutex.new
  9. cnt_r = Atomic(Int32).new(0)
  10. mutex_r = Mutex.new
  11. start = Time.now
  12. duration=Time::Span.new(0,0,45)
  13. endt = start+duration
  14. (1..10).each do
  15. spawn do
  16. soc = UDPSocket.new
  17. soc.connect "localhost", 3000
  18. mutex = Mutex.new
  19. curr=Time.now
  20. spawn do
  21. curr2=Time.now
  22. while endt+Time::Span.new(0,0,4)>curr2
  23. begin
  24. message : String | Nil = nil
  25. mutex.synchronize do
  26. message, addr = soc.receive
  27. end
  28. mess = JSON.parse message.not_nil!
  29. t = Time.now.to_unix_f - mess["curr"].as_f
  30. mutex_r.synchronize do
  31. min = Math.min(min, t)
  32. max = Math.max(max, t)
  33. total += t
  34. cnt_r.add 1
  35. end
  36. rescue
  37. puts message
  38. end
  39. curr2=Time.now
  40. Fiber.yield
  41. end
  42. end
  43. curr=Time.now
  44. while endt+Time::Span.new(0,0,4)>curr
  45. data = Hash{"user" => "dummy@example.org", "api_token" => "576231a1-18e6-4fbd-b058-b9d23fa1b456", "curr" => curr.to_unix_f}.to_json
  46. mutex.synchronize do
  47. soc.send data
  48. end
  49. cnt_s.add 1
  50. curr = Time.now
  51. Fiber.yield
  52. end
  53. end
  54. end
  55. scurr=Time.now
  56. while scurr<endt+Time::Span.new(0,0,4)
  57. scurr = Time.now
  58. Fiber.yield
  59. end
  60. puts "avg: "+(total/cnt_r.get).to_s
  61. puts "min: "+min.to_s
  62. puts "max: "+max.to_s
  63. puts "cnt_s: "+cnt_s.get.to_s
  64. puts "cnt_r: "+cnt_r.get.to_s
  65. puts "rps: "+(cnt_r.get/duration.seconds).to_s