Sha256: 32859d1c4cb9c67d88ddcb806353172cd981bc78f0b2c30e6ccfc699a4e31d7a

Contents?: true

Size: 1.27 KB

Versions: 23

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

require 'bundler/setup'
require 'polyphony/adapters/redis'
require 'json'

X_SESSIONS = 1000
X_NODES = 10_000
X_SUBSCRIPTIONS_PER_SESSION = 100

$sessions = []
X_SESSIONS.times do
  $sessions << {
    subscriptions: X_SUBSCRIPTIONS_PER_SESSION.times.map do
      "node#{rand(X_NODES)}"
    end.uniq
  }
end

spin do
  redis = Redis.new
  redis.subscribe('events') do |on|
    on.message do |_, message|
      distribute_event(JSON.parse(message, symbolize_names: true))
    end
  end
end

$update_count = 0

def distribute_event(event)
  $update_count += 1
  # t0 = Time.now
  count = 0
  $sessions.each do |s|
    count += 1 if s[:subscriptions].include?(event[:path])
  end
  # elapsed = Time.now - t0
  # rate = X_SESSIONS / elapsed
  # puts "elapsed: #{elapsed} (#{rate}/s)" if $update_count % 100 == 0
end

spin do
  redis = Redis.new
  throttled_loop(1000) do
    redis.publish('events', { path: "node#{rand(X_NODES)}" }.to_json)
  end
end

spin do
  last_count = 0
  last_stamp = Time.now
  throttled_loop(1) do
    now = Time.now
    elapsed = now - last_stamp
    delta = $update_count - last_count
    puts "update rate: #{delta.to_f / elapsed}"
    last_stamp = now
    last_count = $update_count
  end
end

trap(:int) do
  puts 'bye...'
  exit!
end

suspend

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
polyphony-0.45.0 examples/adapters/redis_pubsub_perf.rb
polyphony-0.44.0 examples/adapters/redis_pubsub_perf.rb
polyphony-0.43.11 examples/adapters/redis_pubsub_perf.rb
polyphony-0.43.10 examples/adapters/redis_pubsub_perf.rb
polyphony-0.43.9 examples/adapters/redis_pubsub_perf.rb
polyphony-0.43.8 examples/adapters/redis_pubsub_perf.rb
polyphony-0.43.6 examples/adapters/redis_pubsub_perf.rb
polyphony-0.43.5 examples/adapters/redis_pubsub_perf.rb
polyphony-0.43.4 examples/adapters/redis_pubsub_perf.rb
polyphony-0.43.3 examples/adapters/redis_pubsub_perf.rb
polyphony-0.43.2 examples/adapters/redis_pubsub_perf.rb
polyphony-0.43.1 examples/adapters/redis_pubsub_perf.rb
polyphony-0.43 examples/adapters/redis_pubsub_perf.rb
polyphony-0.42 examples/adapters/redis_pubsub_perf.rb
polyphony-0.41 examples/adapters/redis_pubsub_perf.rb
polyphony-0.40 examples/adapters/redis_pubsub_perf.rb
polyphony-0.39 examples/adapters/redis_pubsub_perf.rb
polyphony-0.38 examples/adapters/redis_pubsub_perf.rb
polyphony-0.36 examples/adapters/redis_pubsub_perf.rb
polyphony-0.34 examples/adapters/redis_pubsub_perf.rb