public
Created

Example of Celluloid::WebSocket::Client usage from inside Sidekiq workers

  • Download Gist
sinkiq.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
# Make sure you have Sinatra installed, then start sidekiq with
# sidekiq -r ./sinkiq.rb
# Simply run Sinatra with
# ruby ./sinkiq.rb
# and then browse to http://localhost:4567
#
require 'sinatra'
require 'sidekiq'
require 'redis'
require 'celluloid'
require 'celluloid/websocket/client'
 
$redis = Redis.connect
 
 
class MyWebSocketWhatever
include Celluloid
 
def initialize(url)
@ws_client = Celluloid::WebSocket::Client.new url, Celluloid::Actor.current
end
 
def send_message(msg)
@ws_client.text msg
end
 
def on_message(msg)
$redis.lpush 'sinkiq-example-messages', "RESPONSE: #{msg}"
end
end
 
class SinatraWorker
include Sidekiq::Worker
 
def perform(msg='lulz you forgot a msg!')
$redis.lpush 'sinkiq-example-messages', "SENT: #{msg}"
MyWebSocketWhatever.new('ws://echo.websocket.org').send_message msg
end
end
 
 
get '/' do
stats = Sidekiq::Stats.new
@failed = stats.failed
@processed = stats.processed
@messages = $redis.lrange('sinkiq-example-messages', 0, -1)
erb :index
end
 
post '/msg' do
SinatraWorker.perform_async params[:msg]
redirect to('/')
end
 
__END__
 
@@ layout
<html>
<head>
<title>Sinatra + Sidekiq</title>
<body>
<%= yield %>
</body>
</html>
 
@@ index
<h1>Sinatra + Sidekiq Example</h1>
<h2>Failed: <%= @failed %></h2>
<h2>Processed: <%= @processed %></h2>
 
<form method="post" action="/msg">
<input type="text" name="msg">
<input type="submit" value="Add Message">
</form>
 
<a href="/">Refresh page</a>
 
<h3>Messages</h3>
<% @messages.each do |msg| %>
<p><%= msg %></p>
<% end %>

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.