WaveBox

A redis-based messaging system

inspired by Tumblr Staircar

Features

  • Easy to use
  • Works well with redis presharding
  • Simple memory usage control
  • Tested in production environment

Example

require 'wave_box'

class User
  include ::WaveBox::GenerateWave
  include ::WaveBox::ReceiveWave

  can_generate_wave :name => "message",
                    :redis => :wave_redis_instance,
                    # waves with timestamp older than expire will be discarded
                    :expire => 60 * 60 * 24 * 7, # One week
                    # only store last 20 waves
                    :max_size => 20,
                    :id => :wave_box_id

  can_receive_wave :name => "message",
                   :redis => :wave_redis_instance,
                   :expire => 60 * 60 * 24 * 7, # One week
                   :max_size => 20,
                   :id => :wave_box_id

  def wave_redis_instance
    Redis.new # return a redis instance
  end

  def wave_box_id
    self.id
  end
end

sender = User.new
# => #<User:0x007f85631b9a50>
receiver = User.new
# => #<User:0x007f85631cf940>

# Send a wave from sender to receiver
sender.generate_message "hi", receiver

# Find all message waves in sender's outbox
sender.generated_message_after(0)
# => ["hi"]

# Find all message waves in receiver's inbox
receiver.received_message_after(0)
# => ["hi"]

Install

gem install wave_box

License

the MIT License.